Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 272
от 17.07.2007, 11:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 435, Экспертов: 59
В номере:Вопросов: 2, Ответов: 7


Вопрос № 94813: Здравствуйте, эксперты! Вот такой вот вопрос: Есть у меня две таблицы: t1(id, name,state,city,zip) и t2(id,name,state,city,zip,....) В первой таблице у меня список штатов, городов, zip-кодов, а во второй - список людей, с их местонах...
Вопрос № 94874: Доброе время суток, уважаемые эксперты! мне необходимо обслуживать сайт написанный на php с базой данных mysql. скачал пакет денвер, запускаю PhpMyAdmin с сервера. изменяю какие-то ряды, но что-то не соображу как сохранить изменеия? пожалуйста по...

Вопрос № 94.813
Здравствуйте, эксперты!

Вот такой вот вопрос:
Есть у меня две таблицы: t1(id, name,state,city,zip) и t2(id,name,state,city,zip,....)
В первой таблице у меня список штатов, городов, zip-кодов, а во второй - список людей, с их местонахождением.

Нужен запрос, который будет выбирать по определенному штату города, количество zip`ов в каждом городе (этот запрос у меня уже есть) + количество людей в каждом городе. (Города могут быть одинаковыми в разных штатах, поэтому надо проверять по zip`у тоже)

Вот запрос, реализующий первую часть моего проекта:
SELECT t.city city, count( DISTINCT t.zipcode ) zipcount FROM tblzipcodes t
WHERE t.state = 'AK' GROUP BY city ORDER BY `zipcount` DESC

Этот запрос выбирает все города в штате ALASKA с количеством zip`ов в каждом городе
Отправлен: 11.07.2007, 18:50
Вопрос задал: Заикин Олег (статус: 1-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: gella
Здравствуйте, Заикин Олег!
а чего такая привязка к зипам? просто выбери количество людей, у которых совпадает город и штат - это и есть население города...
что-то вроде:
select state, city, count(*) from t group by state, city

---------
Seve the planet - kill yourself!
Ответ отправила: gella (статус: 4-ый класс)
Ответ отправлен: 11.07.2007, 19:07
Оценка за ответ: 1
Комментарий оценки:
Структура именно такая, какую я написал и изменить ее я не могу.
Я выбираю из первой таблицы городА определенного штата и количество зипов,
которые относятся к каждому городу. Из второй таблицы мне надо
взять количество человек, принадлежащих к каждому городу, из первой части запроса.
Человек из второй таблицы связан с первой штатом, городом и зипом. В принципе достаточно
одного зипа

Отвечает: Grigory
Здравствуйте, Заикин Олег!
Ваш запрос должен использовать JOIN. При условии, что ваша вторая таблица (назовем ее tblUsers) имеет следующую структуру:
id
addressId - Foreign Key на id таблицы tblzipcodes
поля, слдержащие информацию о конкретном человеке, проживающем по данному адресу
Если Вы это делаете в SQL Server 2000, то запрос будет такой (см. приложение)

Приложение:

---------
Если хочешь быть счастливым - будь им! (Козьма Прутков)

Ответ отправил: Grigory (статус: Студент)
Ответ отправлен: 11.07.2007, 19:33
Оценка за ответ: 1
Комментарий оценки:
Структура именно такая, какую я написал и изменить ее я не могу.
Я выбираю из первой таблицы городА определенного штата и количество зипов,
которые относятся к каждому городу. Из второй таблицы мне надо
взять количество человек, принадлежащих к каждому городу, из первой части запроса.
Человек из второй таблицы связан с первой штатом, городом и зипом. В принципе достаточно
одного зипа

Отвечает: Челноков Виктор Альбертович
Здравствуйте, Заикин Олег!
Попробуйте этот запрос
select state,city,count(id) from t2 where state='AK' group by state,city order by city
Он группирет по штатам и городам в них и определяет кол-во людей в них.
А вообще непонятно для чего иметь 2 таблицы с повторяющимися данными, может сделать 1 таблицу т1(id,state,city,zip), т2(id1,name,.....,id) . В первой данные адресов, а во 2 людей и объеденить по id информация по адресу.
Ответ отправил: Челноков Виктор Альбертович (статус: 1-ый класс)
Ответ отправлен: 11.07.2007, 19:52
Оценка за ответ: 1
Комментарий оценки:
В первой таблице находится информация обо всех возможных штатах, во второй же - только информация о людях. Как я уже писал - структуру таблиц я изменить не могу.

Если воспользоваться вашим запросом, то я получу только список городов, в которых есть люди, но не будет городов, в которых людей нет.

Поэтому мне необходимо выбирать города из первой таблицы, а людей - из второй

Отвечает: Виктор Пырлик
Здравствуйте, Заикин Олег!

SELECT tblzipcodes.city, COUNT(DISTINCT tblzipcodes.zipcode) AS zipcount, COUNT(t2.name) AS CountPers
FROM tblzipcodes
INNER JOIN
t2 ON tblzipcodes.state = t2.state AND tblzipcodes.zipcode = t2.zip
WHERE (tblzipcodes.state = 'AK')
GROUP BY tblzipcodes.city, tblzipcodes.state
ORDER BY COUNT(DISTINCT tblzipcodes.zipcode) DESC
-----------------------------------------------------------------------
Это работает так, как вы хотели.


---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: 7-ой класс)
Ответ отправлен: 11.07.2007, 21:14
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо, именно то, что надо

Отвечает: Malabay
Здравствуйте, Заикин Олег!
Вы не упомянули может ли один и тот же человек жить в разных городах, поэтому я считал, что каждый человек может находиться только в одном городе. Также не было сказано, может ли человек быть без места жительства, поэтому я считал, что t2.city is NOT NULL как минимум.

Приложение:

Ответ отправил: Malabay (статус: 1-ый класс)
Ответ отправлен: 12.07.2007, 05:35
Оценка за ответ: 4
Комментарий оценки:
Не совсем верно, но навело на кое-какие мысли, спасибо.


Вопрос № 94.874
Доброе время суток, уважаемые эксперты!
мне необходимо обслуживать сайт написанный на php с базой данных mysql. скачал пакет денвер, запускаю PhpMyAdmin с сервера. изменяю какие-то ряды, но что-то не соображу как сохранить изменеия? пожалуйста поподробнее.
Отправлен: 12.07.2007, 09:15
Вопрос задал: Rado-XXX (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Flynn
Здравствуйте, Rado-XXX!
Не совсем понятно с какого сервера и что ты запускаешь. Если есть денвер - то видимо локальный...
В РНРMyAdmin как только ты ряд изменяешь - он сразу и сохраняется. Если что-то не получается - он выдает ошибку. А для того чтобы занести изменения на сервер в интернете, если до этого работал на локальном, или же наоборот - с интернета на локальный - для этого делается экпорт базу ( при просмотре структуры в базе сверху есть закладка Экспорт). Выделяешь нужные таблицы - и оно выдает тебе SQL код, который потом вставляется в окно запроса в любом другом PHPMyAdmin-e. Единственное что может потребоваться - дописать вначале всего этого когда строку "Use database", где database - название базы данных, в которую ты заносишь изменения, так как майадмин сам с этим туго справляется.
Ответ отправил: Flynn (статус: 1-ый класс)
Ответ отправлен: 12.07.2007, 10:53
Оценка за ответ: 3
Комментарий оценки:
Не совсем подробно. "дописать вначале всего этого когда строку "Use database"" - а этого я вобще не понял. может вы некорректно написали?

Отвечает: Кэр Лаэда
Здравствуйте, Rado-XXX!

Как я понимаю вы редактируете таким способом:

После нажатия кнопки "Обзор" вы видите строки таблицы, и нажав на "карандашик" (правка) вы видите строки для ввода данных, там вы меняете данные, а в самом низу есть радио-кнопки


Сохранить Возврат
или И или
Вставить новый ряд Вставить новую запись
или
Возвратиться к этой странице
или
Edit next row



вам нужно для сохранения выбрать "Сохранить" и "Возврат" и нажать кнопку "Пошел" в англоязычном варианте могут быть другие названия, но смысл тот же.


---------
Я знаю что ничего не знаю, но я знаю больше, чем тот кто думает что знает все
Ответ отправил: Кэр Лаэда (статус: Студент)
Ответ отправлен: 12.07.2007, 15:48
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ответ. я делаю именно так как вы расписали. но на сайте и в самом файле SQL изменения не наблюдаются.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное