2016-07-13 2 views
1

У меня немного проблемы с несколько сложных запросов, и я не могу понять, что именно происходит не так ...Inner Join MySQL Query игнорирует предложение WHERE?

запросе касается двух таблиц MySQL:

$userstable: 
|| id || firstname || lastname 
|| 1 || John  || Doe 

$membershipstable: 
|| groupid || templateid || userid || 
|| 0  ||  1  || 1 || 
|| 1  ||  0  || 2 || 
|| 0  ||  2  || 3 || 

Вот запрос:

$query = " 
    SELECT DISTINCT 
     u.id, 
     u.firstname, 
     u.lastname 
    FROM $userstable AS u 
    INNER JOIN $membershipstable AS M1 ON u.id = M1.userid 
    INNER JOIN $membershipstable AS M2 ON M1.groupid = M2.groupid 
    WHERE M2.templateid = :currenttemplateid 
    "; 

для справки, я уже проверил переменное для заполнителя :currenttemplateid и возвращает правильно ... то, что я пытаюсь сделать, это возвращение из запроса только записи для текущей стемы id, однако запрос возвращает данные пользователя из $userstable для любого пользователя, связанного с шаблоном, независимо от того, соответствует ли этот шаблон шаблону id текущему, указанному в предложении WHERE.

Если я только что полностью выработал это, тогда извиняюсь, но я работаю с этим кодом в течение нескольких часов, поэтому мои чувства могут быть не такими резкими, как они должны быть ... Любая помощь очень ценится.

+0

Для этого образца данных, что ваш ожидаемый результат? – Blank

+0

Например, если «$ currenttemplateid» сказал «1», я бы ожидал, что будут возвращены только пользовательские данные для пользователя с идентификатором «1», так как пользователь с идентификатором «id -> 1» связан с ' templateid -> 1'. Моим текущим возвратом являются не только пользователи, связанные с 'templateid -> 1', но и пользователи, связанные с' templateid -> 2'. –

+0

Думаю, вам просто нужно присоединиться к '$ membershipstable' за один раз, какова ваша цель присоединиться дважды? – Blank

ответ

1

изменить свой запрос следующим образом: -

$query = " SELECT DISTINCT u.id, u.firstname, u.lastname 
      FROM $userstable AS u 
      INNER JOIN $membershipstable AS M1 ON u.id = M1.userid 
      INNER JOIN $membershipstable AS M2 ON M1.groupid = M2.groupid and M2.templateid = :currenttemplateid "; 
Смежные вопросы