Php 从2个表中选择并按1排序

Php 从2个表中选择并按1排序,php,mysql,Php,Mysql,我有两张桌子 第一: TABLE Articles ID 第二: TABLE Viewcount DATE DATE PK ARTICLE_ID INT PK (MATCHES ID IN TABLE Articles) NUMVIEWS INT 如何从表文章中选择所有ID,然后根据日期按Viewcount的NumView(DESC)排序? 然后,我需要将viewcount中未找到的文章中的ID以无特定顺序附加到结果的末尾。 我知道这一定是某

我有两张桌子

第一:

TABLE Articles
  ID  
第二:

TABLE Viewcount
  DATE        DATE  PK
  ARTICLE_ID  INT   PK  (MATCHES ID IN TABLE Articles)
  NUMVIEWS    INT
如何从表文章中选择所有ID,然后根据日期按Viewcount的NumView(DESC)排序? 然后,我需要将viewcount中未找到的文章中的ID以无特定顺序附加到结果的末尾。 我知道这一定是某种形式的加入,但我想不出来

试试这个

SELECT id from Articles a
LEFT JOIN Viewcount v
ON  a.id = v.article_id
AND v.date = 'some date here'
ORDER BY v.numviews ,v.date desc
这应该起作用:

SELECT * FROM `Articles` `a`, `Viewcount` `v`
WHERE `v`.`ARTICLE_ID`=`a`.`ID`
ORDER BY `v`.`NUMVIEWS` DESC

SELECT*
替换为
SELECT`a`.`ID`
以仅获取文章ID。

简单的联接即可,是:

SELECT a.id FROm Articles a LEFT JOIN Viewcount v
ON v.article_id = a.id
ORDER BY v.numviews desc, v.date

我认为他应该只选择IDs,因为我需要按NUMVIEWS/DATE返回所有ID和order,这只返回两个表中存在的ID。我需要返回存在于文章中但不存在于Viewcount中的ID。那么您需要在问题中包含这些ID。请注意,除非表之间存在真正的关联,否则不能在Viewcount中按列对文章中的行进行排序。因此,您的问题是-对于没有viewcount的文章,它们是从结果集中排除、包含在结果集的顶部还是包含在结果集的底部?以没有特定顺序包含在结果的底部,然后使用
左联接
而不是
内部联接
。我已经更新了我的答案。除了我似乎无法根据日期限制Viewcount的结果外,这几乎可以完美地工作。。例如,如果我只需要从Viewcount获取今天的NUMVIEWS desc,则按v.date订购是不行的。。如果我指定其中v.DATE='some DATE range',它会再次限制文章的结果。此处要从
Articles
table中获取ID,当我指定时(其中v.DATE='some DATE here'),它会从找不到的结果中删除文章的其余ID。有没有办法指定一个日期范围,然后左键连接在该范围内找不到的文章中的其余ID?编辑了我的答案。然后尝试在连接中获取指定日期,而不是在where子句中
SELECT ID from (Articles JOIN Viewcount on Articles.ID = Viewcount.ID) ORDER BY Viewcount.NUMVIEWS, Viewcount.date