2015-11-05 97 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` 

希望这会有所帮助。