0

「ID」と「メッセージ」を持つテーブルAと、注文された別のテーブルBがあります。テーブル B の順序に従ってテーブル A を並べたいと思います。

例 - テーブル A:

ID    Message
-------------
1     ABC
2     DEF
3     HIJ
4     KLM
5     NOP

表 B:

ID
---
5
2
4
1
3

期待される結果:

ID    Message
-------------    
5     NOP
2     DEF
4     KLM
1     ABC
3     HIJ

次のクエリがあります。

SELECT DISTINCT s.message, s.stream_id
FROM Stream s
ORDER BY ..... ;

どうすればいいですか?どうやらFIND_IN_SETを使用しても、テーブルBの順序は考慮されていません

アップデート

テーブル B は次のように並べ替えられます。

SELECT stream_id 
FROM SearchCache 
GROUP BY stream_id 
ORDER BY COUNT(stream_id);

したがって、クエリは次のようになります。

SELECT DISTINCT s.message, s.stream_id
FROM Stream s
ORDER BY s.stream_id *SOMETHING* (SELECT stream_id 
                                  FROM SearchCache 
                                  GROUP BY stream_id 
                                  ORDER BY COUNT(stream_id)) ASC;
4

2 に答える 2

0

これを試して:

SELECT a.id, a.message 
FROM tablea a 
INNER JOIN (SELECT (@auto:=@auto+1) auto, id 
            FROM tableb, (SELECT @auto:=0) AS a) AS b ON a.id = b.id 
ORDER BY b.auto;
于 2012-12-31T16:08:48.857 に答える
0

Table B集計で注文しているCOUNT()ため、同じ値を で使用できますORDER BYSELECT派生するリストに追加するだけTable Bです。

SELECT
  DISTINCT 
  s.message, 
  s.stream_id
FROM 
  Stream s
  /* Join against a subquery that produces a count per stream_id */
  /* Using LEFT JOIN in case none exist for a given s.stream_id */
  LEFT JOIN (
    SELECT stream_id, COUNT(*) AS num_streams
    FROM SearchCache
    GROUP BY stream_id
   ) stream_counts ON s.stream_id = stream_counts.stream_id
/* Order by the COUNT() aggregate supplied by the joined subquery */
ORDER BY stream_counts.num_streams ASC

注:テーブルのサンプルを投稿するSearchCacheと、SQLFiddle の例で更新されます...

于 2012-12-31T15:41:45.517 に答える