Вопрос № 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`ов в каждом городе
Отвечает: 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 изменения не наблюдаются.