Php 将多个表与一个表合并以生成更多结果
我有三张桌子:Php 将多个表与一个表合并以生成更多结果,php,mysql,join,Php,Mysql,Join,我有三张桌子: Info: | article_id | title | author | rating | num_comments | |------------|----------------|---------------------|------------|--------------| | 1 | a title | an author | 3.5 | 2
Info:
| article_id | title | author | rating | num_comments |
|------------|----------------|---------------------|------------|--------------|
| 1 | a title | an author | 3.5 | 2 |
| 2 | another title | a different author | 2 | 0 |
Articles:
| article_id | text |
|------------|------------------|
| 1 | longish text... |
| 2 | more text... |
Comments:
|comment_id | article_id | name | comment | date_added |
|-----------|------------|-------------|------------|------------|
| 1 | 1 | this name | first ! | 2013-10-25 |
| 2 | 1 | that name | bla | 2013-10-26 |
我可以从前两个数据库检索数据,而不会出现以下问题:
SELECT Info.*, Articles.text
FROM Info
JOIN Articles
ON Info.article_id = Articles.article_id
WHERE article_id = :article_id
但现在我想从第三个表中获取匹配的行,按日期排序,最好将它们输出到多维数组中。
一个查询就可以做到这一点吗
因此,article_id=1
的预期结果应该如下所示:
array {
[article_id] => 1,
[title] => a title,
[author] => an author,
[rating] => 3.5,
[num_comments] => 2,
[text] => longish text...,
[comments] => array {
[1] => array {
[comment_id] => 1,
[name] => this name,
[comment] => first !,
[date_added] => 2013-10-25
[2] => array {
[comment_id] => 2,
[name] => that name,
[comment] => bla,
[date_added] => 2013-10-26
}
}
只需添加另一个join语句并连接第三个表只需添加另一个join语句并连接第三个表只需添加另一个join语句并连接第三个表即使您没有评论:
SELECT i.*, a.text, c.*
FROM Info i
INNER JOIN Articles a ON Info.article_id = Articles.article_id
LEFT JOIN Comments c ON c.article_id = a.article_id
WHERE a.artice_id = :article_id
即使您没有评论,也可以使用左连接从文章中获取结果:
SELECT i.*, a.text, c.*
FROM Info i
INNER JOIN Articles a ON Info.article_id = Articles.article_id
LEFT JOIN Comments c ON c.article_id = a.article_id
WHERE a.artice_id = :article_id
即使您没有评论,也可以使用左连接从文章中获取结果:
SELECT i.*, a.text, c.*
FROM Info i
INNER JOIN Articles a ON Info.article_id = Articles.article_id
LEFT JOIN Comments c ON c.article_id = a.article_id
WHERE a.artice_id = :article_id
即使您没有评论,也可以使用左连接从文章中获取结果:
SELECT i.*, a.text, c.*
FROM Info i
INNER JOIN Articles a ON Info.article_id = Articles.article_id
LEFT JOIN Comments c ON c.article_id = a.article_id
WHERE a.artice_id = :article_id
我还没有测试过这个
SELECT * FROM Articles
JOIN Info ON Articles.id = Info.article_id
JOIN Comments ON Info.article_id = Comments.article_id WHERE Comments.article_id = :article_id
我还没有测试过这个
SELECT * FROM Articles
JOIN Info ON Articles.id = Info.article_id
JOIN Comments ON Info.article_id = Comments.article_id WHERE Comments.article_id = :article_id
我还没有测试过这个
SELECT * FROM Articles
JOIN Info ON Articles.id = Info.article_id
JOIN Comments ON Info.article_id = Comments.article_id WHERE Comments.article_id = :article_id
我还没有测试过这个
SELECT * FROM Articles
JOIN Info ON Articles.id = Info.article_id
JOIN Comments ON Info.article_id = Comments.article_id WHERE Comments.article_id = :article_id
谢谢,但这不是每一条评论都会产生结果吗?我对我的问题进行了一些编辑,因为我认为我不清楚想要的结果。在一个查询中,这是最接近您想要达到的结果。谢谢,但这不会为每个评论产生结果吗?我对我的问题进行了一些编辑,因为我认为我不清楚想要的结果。在一个查询中,这是最接近您想要达到的结果。谢谢,但这不会为每个评论产生结果吗?我对我的问题进行了一些编辑,因为我认为我不清楚想要的结果。在一个查询中,这是最接近您想要达到的结果。谢谢,但这不会为每个评论产生结果吗?我编辑了一下我的问题,因为我想我不清楚想要的结果。在一个查询中,这是最接近你想要达到的结果。