2013-05-30 6 views
1

Я получаю сообщение об ошибке "Integrity constraint violation: 1052 Column 'restaurant_id' in where clause is ambiguous' in".INNER JOIN: где предложение слишком неоднозначно

a) Как использовать bindparam для JOIN? Это даже проблема, вызывающая эту ошибку?

function restaurant(PDO $dbh, $username) { 
    global $dbh; 
    $stmt = $dbh->prepare(" 
     SELECT  * 
     FROM   users u 
     INNER JOIN menues m 
     ON   u.user_id = m.restaurant_id 
     INNER JOIN users_slider s 
     ON   m.restaurant_id = s.restaurant_id 
     WHERE   restaurant_id = :restaurant_id 
    "); 

    $stmt->bindParam(":restaurant_id", $_GET['r']); 
    $stmt->execute(); 
    return $stmt->fetchAll(); 
} 
+0

Are вы намеренно присоединения '' resturant_id' и user_id', потому что они не звучат как они shoudl имеют ключевое отношение – DavidB

+0

хорошо .. у них есть :) –

+1

Ok круто, просто проверка – DavidB

ответ

10

Изменить

... 
WHERE  restaurant_id = :restaurant_id 

в

... 
WHERE  m.restaurant_id = :restaurant_id 
      ^^ 
+0

круто спасибо! :) –

+0

@NabilGhulam Вы более чем приветствуетесь :) – peterm

2

Пожалуйста, используйте m.restaurant_id или s.restaurant_id в том, где состояние согласно вашей таблице будет решить вашу проблему.

+0

Да спасибо за помощь, peterm сказал, что это первый tho :) –

1

положить где состояние как WHERE m.restaurant_id =: restaurant_id

function restaurant(PDO $dbh, $username) { 
    global $dbh; 
    $stmt = $dbh->prepare(" 
     SELECT  * 
     FROM  users u 
     INNER JOIN menues m 
     ON   u.user_id = m.restaurant_id 
     INNER JOIN users_slider s 
     ON   m.restaurant_id = s.restaurant_id 
     WHERE  m.restaurant_id = :restaurant_id 
    "); 

    $stmt->bindParam(":restaurant_id", $_GET['r']); 
    $stmt->execute(); 
    return $stmt->fetchAll(); 
} 
+0

Его действительно очень приятно и работает –

2

Всегда использовать псевдоним для предотвращения конфликтов в объединяющем запросе. Здесь restaurant_id должен быть m.restaurant_id.

Попробуйте этот вопрос: -

SELECT  * 
     FROM   users u 
     INNER JOIN menues m 
     ON   u.user_id = m.restaurant_id 
     INNER JOIN users_slider s 
     ON   m.restaurant_id = s.restaurant_id 
     WHERE   m.restaurant_id =:restaurant_id 
Смежные вопросы