我需要一些mysl语句的帮助。我有一张“酒店”桌子和一张“象形图”桌子。在表hotels_pictogram_mm中,两者都与mm关系相关。在网站上,用户可以在搜索框中选择几个象形图。所以我想得到所有的酒店,例如“健康”和“免费无线网络”。如何使用sql语句进行此搜索。
当然不适用:
user_type_id
感谢您的帮助! 马丁
答案 0 :(得分: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
您可以加入一次并使用count来检查象形图中匹配ID的数量,但取决于您是否需要除酒店表格中的列以外的列。
答案 1 :(得分: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 = 3
和pictogram.id = 5
以来。在同一时间不能正常。请改用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
上进行LEFT JOIN,并且在pictogram.id = 3
中使用WHERE
,因此行为类似于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)
希望这有帮助。
答案 2 :(得分: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`
希望这有帮助。