我有两张桌子,
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
答案 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
中的一列。