2

我需要一个 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 |
4

2 回答 2

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

于 2012-06-30T03:58:04.053 回答
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's,但这实际上最终使问题复杂化,因为它最终创建了更多独特的列(我将交换顺序to并将from所有 joe's 放入同一列)。一旦你得到了正确的唯一行而不考虑这些tofrom重要的事情,就很难把它放回原处to并且from 无关紧要

也许这会让你开始,而我又对此感到困惑。

于 2012-06-30T04:21:04.857 回答