Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Прошу помочь составить запрос для такого случая.
Есть три таблицы - список провайдеров (providers), список услуг (services), список городов (cities); все таблицы созданы одинаково с PRIMARY KEY id.
+----+-----------+
| id | name |
+----+-----------+
Нужно выбрать всех провайдеров, предоставляющих конкретную услугу в данном городе. Вид услуги и город выбираются в HTML-форме и передаются PHP-скрипту.
Я создал и таблицу связки (reference), в которую заносятся только идентификаторы провайдеров и идентификаторы соответствующих им сервисов и городов. Мой SQL-запрос выглядит так:
Отредактированно Targarien (23.09.2013 11:57:11)
Неактивен
По идее должно работать так (хоть и медленно)
Неактивен
Вообще правильней было бы из HTML формы выдавать сразу ID города и сервиса, а не отбирать по именам.
И мне непонятны вложенные запросы, зачем они здесь?
Неактивен
vasya написал:
По идее должно работать так (хоть и медленно)
SELECT p.image, p.name, p.descr, p.addr, p.phones, p.comment
FROM providers AS p JOIN reference AS r
ON p.id = r.prov_id WHERE
AND r.serv_id = (SELECT services.id FROM services WHERE services.name = 'service')
AND r.city_id = (SELECT cities.id FROM cities WHERE cities.name = 'city');
Приведите результаты
show create table `имя таблицы`;
для ваших таблиц и тестовые данные на десяток строк в виде
insert into ....
Для сокращения писанины я Вам лучше приложу файл экспорта данных из базы. Это и есть тестовый пример, потому что реальную базу данных еще предстоит наполнить.
Неактивен
Александр Трофимов написал:
Вообще правильней было бы из HTML формы выдавать сразу ID города и сервиса, а не отбирать по именам.
И мне непонятны вложенные запросы, зачем они здесь?
Вложенные запросы появились потому, что мне хотелось из HTML выдавать имена, хотя это и не получилось. Кстати, из формы действительно выдаются ID'ы и это работает, но пользоваться ID'ами не совсем хорошо, так как требуется соответствие между порядком следования идентификаторов таблиц в базе данных и порядком расположения данных в операторах OPTION формы. Хотелось бы сохранить универсальность, то есть компот отдельно, а мухи - отдельно.
Неактивен
Targarien написал:
Александр Трофимов написал:
Вообще правильней было бы из HTML формы выдавать сразу ID города и сервиса, а не отбирать по именам.
И мне непонятны вложенные запросы, зачем они здесь?Вложенные запросы появились потому, что мне хотелось из HTML выдавать имена, хотя это и не получилось. Кстати, из формы действительно выдаются ID'ы и это работает, но пользоваться ID'ами не совсем хорошо, так как требуется соответствие между порядком следования идентификаторов таблиц в базе данных и порядком расположения данных в операторах OPTION формы. Хотелось бы сохранить универсальность, то есть компот отдельно, а мухи - отдельно.
Порядок следования данных легко сортируется при выборке из БД.
Неактивен
Александр Трофимов написал:
Порядок следования данных легко сортируется при выборке из БД.
SELECT
id,
name
FROM
cities
ORDER BY
name
В этом случае города будут отсортированы по (скорее всего латинскому) алфавиту и соответствующие ID к ним. И не надо никаких порядков следования. Пользоваться ID'ами необходимо: код безопасней, строка адреса страницы короче.
Спасибо, учту на будущее. Только сортировка мне будет нужна по кириллице.
Неактивен
Вы проверьте, должно работать в актуальных версиях MySQL.
Можно добавить в таблицу с городами колонку «sort» в которой указать порядок сортировки. Это по-любому будет лучшее решение, чем использовать названия городов для отбора. И так же с услугами.
Отредактированно Александр Трофимов (24.09.2013 17:45:28)
Неактивен
Александр Трофимов написал:
Вы проверьте, должно работать в актуальных версиях MySQL.
Можно добавить в таблицу с городами колонку «sort» в которой указать порядок сортировки. Это по-любому будет лучшее решение, чем использовать названия городов для отбора. И так же с услугами.
Спасибо, - с этим все понятно. Может быть поможете с еще одной "заковыкой"?
В таблице для провайдеров есть столбец site, в котором хранится укороченный URL в виде www.somesite.by и другой столбец (name), в котором находится название сайта. Я пытаюсь сформировать URL-ссылку в своем скрипте (get_data.php):
Отредактированно Targarien (25.09.2013 20:44:37)
Неактивен
Targarien написал:
Это не работает - я получаю вот такое сообщение об ошибке:
Parse error: syntax error, unexpected '[', expecting ',' or ';' in get_data.php on line 106
В частности, команда echo $row['site']; ничего не выводит вообще. И сколько я ни рылся в инете, ответа не нашел. Может быть все дело в точках?
А что находится на 106-й строке? Вы код полностью приведите, а то без этого трудно, телепатия не прокачана, увы.
Неактивен
deadka написал:
А что находится на 106-й строке? Вы код полностью приведите, а то без этого трудно, телепатия не прокачана, увы.
Так этот самый оператор и находится в строке 106:
Отредактированно Targarien (26.09.2013 15:19:31)
Неактивен
После строчки
while($row=mysql_fetch_array($result)) {
добавьте строчку
print "<pre>"; print_r($row); print "</pre>";
И приведите сюда вывод.
Неактивен
deadka написал:
После строчки
while($row=mysql_fetch_array($result)) {
добавьте строчку
print "<pre>"; print_r($row); print "</pre>";
И приведите сюда вывод.
Вот вывод для одной строки:
Неактивен
Страниц: 1