选择两个表格,并设置排序优先级


Select two table and put ordering priority

我有两个表,ir1_police包括向管理员报告的消息。ir1_police_flag,管理员可以从1到2标记记者。(1表示中等,2表示低,无表示高优先级)。

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

我使用mysql语句,但是出现了一个问题。如果没有CCD_ 3,则将不显示任何内容。或者如果存在则仅表明它们在CCD_ 4上。

如果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

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,而该表中没有匹配项。这在您的情况下是完美的,因为就ORDER BY而言,NULL被认为比任何值都小。


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