2

「to」または「from」列に「joe」を含むすべての行を選択するmysqlクエリが必要です。「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

アルファベット順にソートされた (from, to) でグループ化する 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いましたが、実際には問題が複雑になります。これは、より多くの一意の列が作成されるためです(順序を入れ替えて、toすべてfromのジョーを同じ列に入れることになります)。それと重要性を考慮せずに適切な一意の行を取得するtofrom、それを元の場所に戻すのが難しくなり、問題にtoなりfrom ません

多分これは私がそれについてもう少しパズルを解く間あなたが始めるのを始めるでしょう。

于 2012-06-30T04:21:04.857 に答える