【问题标题】:MYSQL query to select from multiple tables, order by date, different table structuresMYSQL查询从多个表中选择,按日期排序,不同的表结构
【发布时间】:2012-01-17 10:04:17
【问题描述】:

我正在制作新闻源类型的东西,我想从多个表格中进行选择。对于这个问题,我将重点关注的两个表是“帖子”和“照片”。

这是我对帖子的查询:

mysql_query("
            SELECT * FROM posts 
            WHERE toID='$id' AND state='0' 
            ORDER BY id DESC LIMIT 10");

我的帖子表具有以下列名称:

Table: posts

id  toID   fromID   post   state     date
1    1       1      Aloha    0       1
2    1       1      Hello    0       3

我的照片表有以下内容:

Table: photos

id  userID  photo    state    date
1     1       2       0       2
2     1       6       0       4

预期结果:

Aloha
2
Hello
6

可能是这样的:

 SELECT * 
 (SELECT * FROM posts WHERE toID=$id AND state=0) AND
 (SELECT * FROM photos WHERE userID=$id AND state=0)
 ORDER BY date

当它从数据库中选择这些时,它应该选择 toID 和 userID 相同的地方。两者的状态都应该等于 0,(0 表示可见)并且它们应该按日期排序。我还需要创建一个新变量来传递给我的查询,这样我就可以在我的 php 中确定信息来自哪个表。最后,我希望它按日期对照片进行分组,假设用户在 30 分钟内上传了 20 张照片,他们只会返回一行。我使用 php time() 来存储我的日期。

【问题讨论】:

标签: mysql sql select


【解决方案1】:

如果您想将所有帖子和照片放在一起,您可以使用:

SELECT po.*, ph.* FROM posts po
LEFT JOIN photos ph
    ON po.toID = ph.userID
WHERE po.state = 0
  AND ph.state = 0
ORDER BY po.id DESC, ph.date DESC

【讨论】:

  • 它返回帖子,但不返回照片。
  • @DylanCross:它为每个帖子返回帖子和照片(如果有,请参阅LEFT JOIN)。您确定您正确复制了我的查询吗?
  • 是的,也许我的问题还不够清楚?如果我有 2 个帖子(post1、post2)和 2 张照片(photo1、photo5),应该返回 4 行
  • @DylanCross:您能否编辑您的问题,为每个表发布这两条记录?我刚刚尝试了我的查询并且工作正常,所以我不明白出了什么问题。编辑您的问题,以便我们了解发生了什么...
  • @DylanCross:您的预期结果并不清楚,真的。为什么 post id=1 你选择 photo id=1 而 post id=2 你选择 photo id=2?照片都适用于 userID=1 的用户,因此每个帖子都要选择它们。让我明白...
猜你喜欢
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多