如果存在连接,则mysql更改where子句

时间:2016-01-06 11:03:09

标签: php mysql left-join

我想要做的是加入同一个表,看看字段“reference_id”是否有值,如果是,那么它应该使用该值来获取包含数据的实际行,并将其余数据用于query - where和sort子句,否则使用原始条目数据。

表“条目”字段:

id, text, type, reference_id, num_count

示例数据:

[1, "", 0, 2, 0],
[2, "some text", 2, 0, 50],
[3, "more text", 2, 0, 60],

应该返回:

row 0: "more text"
row 1: "some text"

查询看起来像这样:

SELECT entries.text
FROM entries
LEFT JOIN entries as e2
     ON entries.reference_id = e2.id 
WHERE type = $type
ORDER BY num_count DESC

如果reference_id有某些内容,那么最后两个子句应该从entries.typeentries.num_count更改为e2.typee2.num_count。我如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

请在where子句

中使用别名
    SELECT entries.text
FROM entries
LEFT JOIN entries as e2
     ON entries.reference_id = e2.id 
WHERE entries.type = $type
ORDER BY entries.num_count DESC

答案 1 :(得分:0)

如果我理解正确,那么你只想使用左连接表值(如果存在),否则主表值。

我是这样的: -

SELECT COALESCE(e2.text, entries.text)
FROM entries
LEFT OUTER JOIN entries as e2
ON entries.reference_id = e2.id 
WHERE type = $type
ORDER BY COALESCE(e2.num_count, entries.num_count) DESC