MySql加入两个查询

时间:2014-06-22 03:14:46

标签: mysql

使用此查询:

SELECT entry.ent_video_tipo, count(ent_video_tipo) as cnt 
FROM entry
WHERE entry.ent_user='1'
GROUP BY ent_video_tipo
ORDER BY cnt DESC

我明白了:

ent_video_tipo|cnt
       1      | 3
       3      | 2
       4      | 1
       2      | 1

我收到了另一个问题:

SELECT * FROM meta

我得到了:

met_id|met_name|met_video_tipo
   1  |   bla  |      4
   8  |   bla  |      4
   10 |   bla  |      2
   11 |   bla  |      3
   14 |   bla  |      1
   21 |   bla  |      1
   22 |   bla  |      1
   41 |   bla  |      3

当我尝试此查询时

SELECT M.*
FROM meta M,
INNER JOIN
    (SELECT entry.ent_video_tipo, count(ent_video_tipo) as cnt 
    FROM entry
    WHERE entry.ent_user='1'
    GROUP BY ent_video_tipo
    ORDER BY cnt DESC) E
ON M.met_video_tipo = E.ent_video_tipo
ORDER BY E.cnt DESC

我明白了:

met_id|met_name|met_video_tipo
   21 |   bla  |      1
   14 |   bla  |      1
   22 |   bla  |      1
   41 |   bla  |      3
   11 |   bla  |      3
   10 |   bla  |      2
   8  |   bla  |      4
   1  |   bla  |      4

但这几乎应该归还。唯一不对的是,met_video_tipo列应该是1,3,4,2而不是1,3,2,4

无论如何还有这样的回归? ?

met_id|met_name|met_video_tipo
   21 |   bla  |      1
   14 |   bla  |      1
   22 |   bla  |      1
   41 |   bla  |      3
   11 |   bla  |      3
   8  |   bla  |      4
   1  |   bla  |      4
   10 |   bla  |      2

2 个答案:

答案 0 :(得分:1)

也许您不需要创建另一个表。 试试这个:

select a.met_id,a.met_name,a.met_video_tipo from meta a,
(select met_video_tipo,count(*) as cnt from meta group by met_video_tipo) as x 
where x.met_video_tipo=a.met_video_tipo order by x.cnt desc;

您也可以使用条目表而不是逐个查询。

答案 1 :(得分:1)

数据库根据您的要求正确排序,即E.CNT DESC。

met_video_tipo 4和2具有相同的计数1.由于没有为met_video_tipo定义order by,数据库可以根据各种条件更改met_video_tipo的顺序。

要按照您的意愿明确订购,请尝试ORDER by e.cnt DESC, m.met_video_tipo DESC