1

目標: 2 つのテーブルを結合し、1 つの列 (ui.UNO) で並べ替え、次に GROUP BY (images.INO) で並べ替えます。

問題: ORDER BY は予想どおり重複した結果を返しますが、ORDER BY を使用して現在のユーザーの画像を一番上に表示しようとしているときに、GROUP BY を使用すると、別のユーザーにリンクされているかどうかに関係なく、最初の結果のみが表示されます。

例: 下の表では 2 番目の結果を探していますが、GROUP BY を使用すると最初の結果のみが表示され、リンクされたデータ (ui.IUTally) はすべて間違っています。事前にご協力いただきありがとうございます。

Images                          
   INO    |    IName    |    IDescription
   3      |    Sports   |    "......"      
   3      |    Sports   |    "......"

UI
   UNO    |    INO     |    IUTally  
   4      |    3       |    12
   7      |    3       |    6

.

SELECT images.INO, images. IName, ui. UNO, ui. IUTally
FROM images 
LEFT JOIN ui ON images. INO = ui. INO
GROUP BY images. INO
ORDER BY ui. UNO = $uno DESC

Images / UI                           
   INO    |    IName    |    UNO    |    INO     |    IUTally  
   3      |    Sports   |    4      |    3       |    12
   3      |    Sports   |    7      |    3       |    6
4

2 に答える 2

0

他のユーザーと連携したデータを閲覧するには、このように SELECT 句で GROUP_CONCAT 関数を使用する必要がある場合があります。

SELECT images.INO, GROUP_CONCAT(images.IName ORDER BY ui.UNO), GROUP_CONCAT(ui.UNO ORDER BY ui.UNO), GROUP_CONCAT(ui.IUTally ORDER BY ui.UNO)
FROM images 
LEFT JOIN ui ON images. INO = ui. INO
GROUP BY images. INO
ORDER BY ui. UNO = $uno DESC";

これが役立つか、それとも何か他のものを探しているかどうか教えてください。

于 2013-09-16T17:46:35.213 に答える
0

最初に結果を並べ替えてからグループ化する 1 つの方法を次に示しますが、このトリックには sub select が含まれていORDER BYますGROUP BY

SELECT q.* FROM (
SELECT images.INO, images. IName, ui. UNO, ui. IUTally
FROM images 
LEFT JOIN ui ON images. INO = ui. INO   
ORDER BY ui. UNO = $uno DESC
) q GROUP BY q. INO

最初に結果を並べ替えてからグループ化します

于 2013-09-16T17:54:32.090 に答える