2015-11-05 98 views
0

我需要一些mysl語句的幫助。我有一個「酒店」表和「象形圖」表。兩者都與mm關係在飯店圖標__中相關。在網站上用戶可以在搜索框中選擇幾個圖標。所以我想得到所有的酒店,例如「健康」和「免費無線網絡」。 SQL語句必須如何用於此搜索。以下課程的多語言AND語句在mm表中

不起作用:

SELECT * 
FROM hotel 
LEFT JOIN hotel_pictogram_mm ON hotel.uid=hotel_pictogram_mm.uid_local 
LEFT JOIN pictogram ON hotel_pictogram_mm.uid_foreign=pictogram.uid 
WHERE 
pictogram.id = 3 
AND pictogram.id = 5 

感謝您的幫助! 馬丁

+3

也許嘗試與OR:'pictogram.id = 3或pictogram.id = 5'? – Typoheads

+0

或是不正確的說法,因爲結果會顯示有健康或免費wifi的酒店。但我只需要兩家酒店。 – matin

+0

相同的字段不能有2個不同的值,所以使用OR不是正確的語句。因此,您需要在BOTH加入酒店的同時,在圖標上檢查2個不同的行。 – Kickstart

回答

0

你需要加入對象形兩次,一次爲每個ID: -

SELECT * 
FROM hotel 
INNER JOIN hotel_pictogram_mm ON hotel.uid=hotel_pictogram_mm.uid_local 
INNER JOIN pictogram p3 ON hotel_pictogram_mm.uid_foreign=p3.uid 
INNER JOIN pictogram p5 ON hotel_pictogram_mm.uid_foreign=p5.uid 
WHERE p3.id = 3 
AND p5.id = 5 

你可以參加一次,並使用計數檢查匹配從象形ID的數量,而是取決於你是否希望列除了酒店餐桌上的那些。

0
SELECT * 
FROM hotel 
LEFT JOIN hotel_pictogram_mm ON hotel.uid=hotel_pictogram_mm.uid_local 
LEFT JOIN pictogram ON hotel_pictogram_mm.uid_foreign=pictogram.uid 
WHERE 
pictogram.id = 3 
AND pictogram.id = 5 

這個查詢will have empty set因爲pictogram.id = 3pictogram.id = 5。可以在同一時間爲TRUE。使用OR代替。

所以,你應該用

SELECT * 
    FROM hotel 
    LEFT JOIN hotel_pictogram_mm ON hotel.uid=hotel_pictogram_mm.uid_local 
    LEFT JOIN pictogram ON hotel_pictogram_mm.uid_foreign=pictogram.uid 
    WHERE 
    pictogram.id = 3 
    OR pictogram.id = 5 

注意:既然你是做留在pictogram JOIN,並使用pictogram.id = 3WHERE它會像INNER JOIN

insted的,你可以做這樣的

SELECT * 
     FROM hotel 
     LEFT JOIN hotel_pictogram_mm ON hotel.uid=hotel_pictogram_mm.uid_local 
     LEFT JOIN pictogram ON hotel_pictogram_mm.uid_foreign=pictogram.uid 
AND (pictogram.id = 3 OR pictogram.id = 5) 

希望這有助於。

0

假設酒店有id,您可以自行加入結果集。這將工作

SELECT T1.* 
FROM 
(SELECT *,hotel.`id` 
FROM hotel 
INNER JOIN hotel_pictogram_mm ON hotel.uid=hotel_pictogram_mm.uid_local 
INNER JOIN pictogram ON hotel_pictogram_mm.uid_foreign=pictogram.uid 
WHERE 
pictogram.id = 3) T1 INNER JOIN 
(SELECT hotel.`id` 
FROM hotel 
INNER JOIN hotel_pictogram_mm ON hotel.uid=hotel_pictogram_mm.uid_local 
INNER JOIN pictogram ON hotel_pictogram_mm.uid_foreign=pictogram.uid 
WHERE 
pictogram.id = 5) T2 ON T1.`id`=T2.`id` 

希望這會有所幫助。