|
|
|
| Как делать запросы с нескольких таблиц?
Например, есть две таблицы: main и add, у них есть поля, one и two соответственно. Как одним запросом "спросить" эти данные? | |
|
|
|
|
|
|
|
для: FiX
(26.06.2006 в 20:20)
| | При многотабличных запросах нужно уточнять, из какой таблицы идёт выборка:
SELECT main.one, add.two FROM main, add;
|
| |
|
|
|
|
|
|
|
для: Саня
(27.06.2006 в 01:19)
| | А можно подробее о всех элементах:
SELECT main.one, add.two FROM main, add;
main.one - это столбец one из таблица main, так? Второй тоже... А можно ли сделать такой же запрос, но для трех, четырех таблиц? Например, SELECT main.one, add,two, three,three и т.д.?
И еще: как вытащить результат? mysql_fetch_array() подойдет? | |
|
|
|
|
|
|
|
для: FiX
(27.06.2006 в 12:26)
| | таблица.поле | |
|
|
|
|
|
|
|
для: FiX
(27.06.2006 в 12:26)
| | >тоже... А можно ли сделать такой же запрос, но для трех,
>четырех таблиц? Например, SELECT main.one, add,two,
>three,three и т.д.?
Да, можно, только лучше не злоупотреблять, так как при многотабличных запросах достаточно серьёзная нагрузка на базу данных.
>И еще: как вытащить результат? mysql_fetch_array() подойдет?
Да подойдёт, только вместо ключа нужно писать расширенное имя, как указал valenok, или использовать псевдонимы столбцов, которые можно назначить при помощи оператора AS
SELECT main.one AS one, add.two AS two FROM main, add;
|
| |
|
|
|
|
|
|
|
для: cheops
(27.06.2006 в 15:14)
| | А как сделать вот такую вещь. Нужно выбрать все столбцы из первой таблицы, а из второй - только один. Не получилось...
Идея вот какая. В первой таблице в поле street хранится id улицы со второй таблицы. То есть:
streets // первая таблица, с id улицы
1
2
id | name // вторая таблица, с названием улицы
1 | победы
2 | мира
|
Надеюсь, объяснил понятно... Первая таблица называется main вторая - streets. | |
|
|
|
|
|
|
|
для: FiX
(29.06.2006 в 01:14)
| | Для этого следует воспользоваться запросом вида
SELECT main.*, street.name AS two
FROM streets, main
WHERE main.id_street = streets.id
GROUP BY main.id;
|
| |
|
|
|
|
|
|
|
для: cheops
(29.06.2006 в 02:05)
| | Спасибо, работает! Но вот следующая проблема:
Никак не получается сделать запрос. Есть три улицы: street_1, street_2, street_3. Названия берутся из той же таблицы (streets). Как вытащить эти названия для трех столбов? Запрос вида
SELECT buy.*, streets.name AS streets FROM streets, buy WHERE buy.street_1 && buy.street_2 && buy.street_3 = streets.id GROUP BY buy.id
|
выводит только последнее название улицы... Помогите, пожалуйста. | |
|
|
|
|
|
|
|
для: FiX
(29.06.2006 в 23:01)
| | Чего-то не очень понятно... Как звучит условие выборки на словах? | |
|
|
|
|
|
|
|
для: cheops
(30.06.2006 в 11:46)
| | Как мы уже говорили, названия улиц хранятся в таблице streets. Так вот, а в другой таблице (buy) вместо названия улиц стоят просто их id (например, у улицы Мира id - 2, и т.д.). Думаю, это понятно. Во второй таблице полей с "улицами" три. У каждого из полей разные улицы, например (id): 2, 8, 6. Для этих трех мне и надо вытащить названия улиц. Как я уже писал, подобный запрос выводит только последнюю улицу, то есть, например, 6.
Думаю, понятно... :) | |
|
|
|
|
|
|
|
для: FiX
(30.06.2006 в 17:42)
| | У вас MySQL выше версии 4.1 или ниже? Т.е. имеется возможность использовать вложенные запросы? | |
|
|
|
|
|
|
|
для: cheops
(30.06.2006 в 18:46)
| | Попробуйте дать пример вложенного запроса, пожалуйста, может, хотя бы он поможет... | |
|
|
|
|
|
|
|
для: FiX
(29.06.2006 в 23:01)
| | А так?
SELECT buy.*, s1,name, s2.name, s3.name
FROM buy, streets as s1, streets as s2, streets as s3
WHERE buy.street_1 = s1.id AND buy.street_2 = s1.id AND buy.street_3 = s3.id
|
| |
|
|
|
|
|
|
|
для: Trianon
(30.06.2006 в 18:52)
| | И так не получается :( По разному пробовал менять данные, менял названия столбцов, бесполезно. Сколько часов сидел, все напрасно. Попробую объяснить на пальцах :)
Таблица buy:
улица : id улицы (с таблицы streets)
street_1 : 2
street_2 : 1
street_3 : 3
Таблица streets:
id : название (name)
1 : Мира
2 : Строителей
3 : Советская
То есть, street_1 должна выводить название улицы - Строителей, street_2 - Мира, street_3 - Советская. Я бы использовал вложенный запрос (с использованием while - по три запроса на цикл), но он очень "сложный" для сервера mysql, тем более, если будет таких запросов от 100 и выше... | |
|
|
|
|
|
|
|
для: FiX
(01.07.2006 в 18:20)
| | Ну пожалуйста, ведь для кого-то этот запрос очень легкий =) | |
|
|
|
|
|
|
|
для: FiX
(03.07.2006 в 00:55)
| | У меня вариант (30.06.2006 в 18:52) идет на ура. Если исправить опечатку, заменив в s1,name запятую на точку.
Что у Вас за версия сервера? Сдается мне, она настолько древняя, что вложенные запросы не поддерживает, раз такой простой не смогла взять. | |
|
|
|
|
|
|
|
для: Trianon
(03.07.2006 в 20:46)
| | Не знаю, у меня не идет... Версия у меня 4.1.
Может, я поля неправильно менял? Пробовал и с s1.name, пробовал и street_1.name, и street_1.buy, ничего... А вообще, такая же схема, как и в тех запросах (выше), но надо одновременно спросить данные для трех таблиц. | |
|
|
|