我对一个小的mysql查询有一个小问题。我试图选择几个列,同时计算表中的内容,并将计数结果添加为另一列。所以,让我说我有三个朋友
我想看到另一栏说allfriends => 3
所以我想出了一些看起来像这样的东西
SELECT friends.friend, users.avatar, COUNT(*) AS allfriends FROM users,friends
现在有什么不起作用的。所以我试着把它们分组,但后来我得到了一个' 1'对于每一行。所以只计算个别行。我的问题是:有没有办法计算所有结果并将它们全部加在一起,以便给我一些我从表中检索到的内容
答案 0 :(得分:1)
我不是一个mysql专业人员,所以这很费劲,但帮助我在这个过程中学到了很多东西。 这是一个sql示例,我用自己的数据库来制作这个概念。 我希望这就是你想要的。
核心概念是为每个表/查询结果生成一个auto_increment列,然后左/右连接取决于哪个表有更多行。 在1 SQL中创建一个自动增量列是繁琐的,我所做的是通过
启动@cnt变量(select @cnt := 0 AS rowNumber) as t0
但我从未使用过那张桌子。然后我做
select (@cnt := @cnt + 1) AS rowNumber, ....
在下表中列出了incrmental列。
该方法有一个关键的弱点,您必须知道哪个列/查询将返回最多行并预定义SQL中JOIN的类型。我不确定这对你有什么帮助,但是我想分享它。
mysql> select t1.rowNumber,t1.friend, t2.rowNumber,t2.avatar from (select @cnt := 0 AS rowNumber) as t0 RIGHT JOIN (select (@cnt := @cnt + 1) AS rowNumber,friend from friends) as t1 using (rowNumber) LEFT JOIN (select @cnt := 0 AS rowNumber) as t4 using (rowNumber) RIGHT JOIN (select (@cnt := @cnt + 1) AS rowNumber,avatar from user) as t2 using (rowNumber);
+-----------+-------------+-----------+------------+
| rowNumber | friend | rowNumber | avatar |
+-----------+-------------+-----------+------------+
| 1 | 0001 | 1 | 0001 |
| 2 | 0002 | 2 | 0002 |
| 3 | 0003 | 3 | 0003 |
| 4 | 0004 | 4 | 0004 |
| 5 | 0005 | 5 | 0005 |
| 6 | 0006 | 6 | 0006 |
| 7 | 0007 | 7 | 0007 |
| 8 | 0008 | 8 | 0008 |
| 9 | 0009 | 9 | 0009 |
| 10 | 0010 | 10 | 0010 |
| NULL | NULL | 11 | 0011 |
| NULL | NULL | 12 | 0012 |
| NULL | NULL | 13 | 0013 |
| NULL | NULL | 14 | 0014 |
| NULL | NULL | 15 | 0015 |
| NULL | NULL | 16 | 0016 |
| NULL | NULL | 17 | 0017 |
| NULL | NULL | 18 | 0018 |
| NULL | NULL | 19 | 0019 |
| NULL | NULL | 20 | 0020 |
+-----------+-------------+-----------+------------+
20 rows in set (0.00 sec)
答案 1 :(得分:0)
我觉得这应该有效,因为你的问题很容易让人感到困惑
SELECT friends.friend,users.avatar,xyz。* FROM users,friends,(SELECT COUNT(*)AS allfriends FROM users,friends)xyz