选择两个表并放置订购优先级

时间:2013-08-01 19:55:18

标签: php mysql

我有两张桌子, ir1_police包含向管理员报告的消息。 ir1_police_flag,管理员可以从1到2标记记者。(1表示中等2表示低,没有任何表示高优先级。)

如果有人试图举报不真实的内容。管理员会将其标记为1或2。 所以我会列出一个显示第一个高优先级,第二个中等和最后一个低的报告列表。

我使用mysql语句但是有问题。如果没有任何内容ir1_police_report将不会显示任何内容。或者如果仅存在则显示它们在ir_police_flags

如果ir1_police_flags

上没有记录,我无意选择它们
SELECT * FROM ir1_police 
JOIN ir1_police_flags on ir1_police_flags.uid = `ir1_police.uid 
WHERE 
ir1_police.status=0 AND ir1_police.parent_id=0 
ORDER BY ir1_police.time DESC

1 个答案:

答案 0 :(得分:0)

JOIN替换为LEFT JOIN。前者仅从找到匹配的表中选择行,而后者选择第一个表中的所有行,即使其他表中没有匹配也是如此。

然后您可以向ORDER BY添加第二个字段:

SELECT * FROM ir1_police
LEFT JOIN ir1_police_flags ON ir1_police_flags.uid = ir1_police.uid
WHERE ir1_police.status=0 AND ir1_police.parent_id=0 
ORDER BY
    ir1_police_flags.flag ASC,
    ir1_police.time DESC

请注意,LEFT JOIN会生成结果,其中所有ir1_police_flags的字段均为NULL,此表中没有匹配项。在您的情况下,这是完美的,因为NULL被认为小于任何值,就ORDER BY而言。


您的应用程序可能证明这种结构是合理的,但您应该问自己这个标志是否应该只是表ir1_police中的一列。