提问者:小点点

按日期排序查询两个表


因此,我有两个表,它显示的值类似于Facebook look-a feed。它们都有一个datetime列,名为date,但我希望它们按日期desc排序。

我认为加入是正确的方式(?),但不太确定。有人能帮帮我吗?

目前我在两个不同的查询中有它们:

$status1 = "1";
$stmt1 = $link->prepare('
SELECT id
     , ident_1
     , ident_2
     , date
     , ident_1_points
     , ident_2_points 
  FROM duel 
 WHERE active=? 
 ORDER 
    BY date
');
$stmt1-> bind_param('s', $status1);

而且

$status2 = "OK";
$stmt2 = $link->prepare('SELECT id, ident, pp, date FROM sales WHERE status=? AND team IN (2, 3) ORDER BY date DESC LIMIT 20');
$stmt2->bind_param('s', $status2);

我该怎么做呢?


共1个答案

匿名用户

如果您想要一个包含两个表中数据的连续列表,并且整个列表按日期排序,那么您可能需要在子查询中使用联合查询,然后对外部查询进行排序,如下所示:

SELECT * 
FROM
(
  SELECT id, ident_1, ident_2, date, ident_1_points, ident_2_points
  FROM duel 
  WHERE active=?

  UNION ALL

  SELECT id, ident, pp, date, NULL, NULL 
  FROM sales 
  WHERE status=? 
    AND team IN (2, 3)
  LIMIT 20
) list
ORDER BY date DESC 

老实说,从您的描述来看,需求并不是100%清楚(在询问SQL问题时,示例数据和预期结果总是很有帮助),但我认为这非常接近您所需要的。

join似乎并不合适,除非您想要一个结果集,其中每个表中的项通过某个公共字段相互链接,并将它们组合在一起,这样就可以得到并列的所有列,显示一个表中的数据,旁边是与另一个表中的数据相匹配的数据。

如果您不确定,我建议查看说明JOIN和UNION的教程/示例/文档。