2012-02-22 2 views
1

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

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

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

ответ

3

используется пункт 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 
+1

У вас есть два предложения 'where' вместо' AND'. Так что это неверно. Правильный - '... WHERE usrxplc.Place = places.ID И usrxplc.User = users.ID И users.UserID = 123'. – AlexZam

+0

Спасибо, спасибо, спасибо! Я пробовал это как 1000 раз раньше, но продолжал делать глупые ошибки в моем синтаксисе. – Whitewall

+0

+1 как он решает проблему - просто чувствовал, что предлагаю метод JOIN :) –

2

Просто почувствовал необходимость размещать альтернативу - вместо того, чтобы выбрать и все таблицы, вы можете использовать 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 

Это функционально же, как и другой ответ, однако, когда вы получаете на более сложные запросы и таблицы, вы обнаружите, что с помощью JOINS позволяет повысить оптимизации, как вы можете furthe г ограничить строки каждого отдельного РЕГИСТРИРУЙТЕСЬ получает, например, следующее также справедливо, когда строка пользователя ограничивается до прихода на другие таблицы

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 

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

+0

Спасибо !!! Почему я не могу отметить как полезные комментарии от вас обоих? – Whitewall

Смежные вопросы