0

我有两个表, 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
4

1 回答 1

0

替换JOINLEFT 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_flagsNULLNULLORDER BY


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

于 2013-08-01T20:11:58.117 回答