0

我有一个表 A,它有一个“ID”和“消息”,另一个表 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

由于您是Table B按聚合排序的COUNT(),因此您可以在ORDER BY. 只需将其添加到SELECT派生的列表中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 回答
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 回答