Mysql Несколько таблиц выберите с условием - PullRequest
2 голосов
/ 22 февраля 2012

У меня вопрос по нубу, но довольно неприятный для меня. Я использую SELECT для трех таблиц, средняя из которых является реалистичной (содержит отношения - идентификатор пользователя и идентификатор места), первая - таблица пользователей, последняя из мест. Я написал этот прекрасно просыпающийся запрос

$query = "SELECT users.Username,usrxplc.User,places.Name
          FROM users,usrxplc,places
          WHERE usrxplc.Place=places.ID AND usrxplc.User=users.ID"

Это выплевывает все места, связанные со всеми пользователями. Хорошо, но я хотел бы ограничить это только для определенного пользователя. Кажется простым, но я застрял.

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

Вы используете предложение WHERE для фильтрации результатов, поэтому просто добавьте предложение для users.ID:

select users.Username,
    usrxplc.User,
    places.name
from users,
    usrxplc,
    places
where usrxplc.Place = places.ID
    and usrxplc.User = users.ID
    and users.ID = 123
2 голосов
/ 22 февраля 2012

Просто почувствовал необходимость опубликовать альтернативу - вместо выбора и всех таблиц вы можете использовать INNER JOIN для объединения одной таблицы в другую

SELECT 
    users.Username,
    places.Name

FROM users
INNER JOIN usrxplc ON usrxplc.User=users.ID
INNER JOIN places ON places.ID = usrxplc.Place

WHERE users.ID = 111

Это функционально так же, как и другой ответ, однако, когда выПриступая к более сложным запросам и таблицам, вы обнаружите, что использование JOIN позволяет более эффективно оптимизировать, поскольку вы можете дополнительно ограничивать строки, которые получает каждое отдельное JOIN, например, следующее также допустимо, когда строка User ограничена перед присоединением к другим таблицам

SELECT 
    users.Username,
    places.Name

FROM places
INNER JOIN usrxplc ON usrxplc.Place = places.ID
INNER JOIN users ON users.ID = usrxplc.User AND users.ID = 111

В более сложных запросах или, если бы эти таблицы были намного больше, это, в свою очередь, предложило бы более оптимальный запрос, вообще говоря

...