我有两张桌子。其中一个名为files
,其中包含所有文件的列表。第二个表名为payments
,其中有一些文件的付款清单。
付款:
id | fileid | {...}
1 2
2 3
3 2
文件:
id | {...}
1
2
3
我想选择所有文件,并加入表格payments
以按此表的计数排序。
在这种情况下,第一行将是文件#2,因为它在payments
表中重复次数最多。
我尝试这样做,但是当我这样做时,并非显示所有行!
我认为这是因为并非所有文件都在payments
表中。所以在这种情况下,我认为它不会显示第一行。
谢谢,对不起我的英文
P.S:我使用的是mysql引擎
**更新** 我的代码:
SELECT `id`,`name`,`size`,`downloads`,`upload_date`,`server_ip`,COUNT(`uploadid`) AS numProfits
FROM `uploads`
JOIN `profits`
ON `uploads`.`id` = `profits`.`uploadid`
WHERE `uploads`.`userid` = 1
AND `removed` = 0
ORDER BY numProfits
答案 0 :(得分:2)
正如其他人所说,你需要使用LEFT JOIN。 - 这告诉MySQL,即使右边的表中没有相应的条目,也应该包括从左边的表中输入的条目。
此外,您应该使用GROUP BY来指示COUNT应该如何被删除。
所以SQL应该是这样的;
SELECT Files.ID, count(Payments.FileID) as numpays FROM
Files
LEFT OUTER JOIN
Payments
ON Files.id=Payments.FileID
GROUP BY files.ID
ORDER BY numpays desc
答案 1 :(得分:0)
尝试LEFT JOIN
- 在MySQL中,默认JOIN
实际上是INNER JOIN
。在INNER JOIN
中,您只会获得在联接两侧的结果。
请参阅:Difference in MySQL JOIN vs LEFT JOIN
并且,正如评论中所述,您可能还需要GROUP BY
和COUNT
,以防止它只计算所有返回的行。
答案 2 :(得分:0)
试试这个:
select B.fileid,A.{}.....
from
(select id,.....
from files A
inner join
(select count(*),fileid,.....
from payments
group by fileid) B
on files.id=payments.fileid)
我希望这会有所帮助。我假设文件表中的所有ID都是唯一的。在这个答案中,您可以根据自己的意愿应用order by子句。我已经把select语句留给你来选择你想要获取的数据。
就你的问题所描述,我认为这应该有效。如果有任何问题,请发表评论。