多表和mm表的mysql语句

时间:2015-11-05 09:42:45

标签: php mysql

我需要一些mysl语句的帮助。我有一张“酒店”桌子和一张“象形图”桌子。在表hotels_pictogram_mm中,两者都与mm关系相关。在网站上,用户可以在搜索框中选择几个象形图。所以我想得到所有的酒店,例如“健康”和“免费无线网络”。如何使用sql语句进行此搜索。

当然不适用:

user_type_id

感谢您的帮助! 马丁

3 个答案:

答案 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 setpictogram.id = 3pictogram.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`

希望这有帮助。