我需要一个mysql查询,它将在“to”或“from”列中选择包含“joe”的所有行。它需要在“to”和“from”列之间区分,这意味着名称出现的顺序无关紧要。即“joe”,“bob”应视为与“bob”相同,“乔”。如果一对名称中有重复项,请选择具有最大ID的名称。最终表也应按id递减排序。例如,在下表中运行查询:
在:
id to from
---|-----|------
1 | joe | bob |
2 | bob | hal |
3 | joe | joe |
4 | sue | joe |
5 | bob | bob |
6 | bob | joe |
7 | hal | hal |
8 | joe | bob |
后:
id to from
---|-----|------
8 | joe | bob |
4 | sue | joe |
3 | joe | joe |
答案 0 :(得分:2)
尝试按字母顺序排序的(从,到)分组的GROUP BY:
SELECT id, `from`, `to`
FROM yourtable
WHERE id IN
(
SELECT MAX(id)
FROM yourtable
WHERE `from` = 'joe' OR `to` = 'joe'
GROUP BY LEAST(`from`, `to`), GREATEST(`from`, `to`)
)
ORDER BY id DESC
查看在线工作:sqlfiddle
答案 1 :(得分:0)
嗯...我可以接近:
SELECT inside.id, inside.`to` , inside.`from`
FROM (
SELECT MAX( id ) id, `to` , `from`
FROM people
WHERE `to` = 'joe'
OR `from` = 'joe'
GROUP BY `to` , `from`
)inside
ORDER BY inside.id DESC
但是这并没有给出你想要的结果,因为当交换to和from时它仍然存在欺骗。
我尝试使用某些UNION
,但这实际上最终会使问题复杂化,因为它最终会创建更多唯一列(我会交换to
和from
的顺序让所有的乔进入同一列)。如果您在没有考虑to
和from
问题的情况下获得了正确的唯一行,则很难将其恢复到to
和from
don'的位置t 很重要。
也许这会让你开始,而我却更加困惑。