gpt4 book ai didi

php - MySQL:多行结果的标准方法 VS 基于集合的方法

转载 作者:行者123 更新时间:2023-11-29 03:43:53 24 4
gpt4 key购买 nike

跟进 question ,在以下情况下,标准方法递归方法存在问题。

比如我想返回parent_id相同的页面,有的页面有多行内容

page_id    page_title   parent_id
1 a 1
2 aa 1
3 ab 1
4 ac 1

内容

content_id   content_text
1 text one
2 text two
3 text one aa
4 text two aa
5 text one ab
6 text one ac

内容结构

page_id     content_id     order_in_page
1 1 1
1 2 2
2 3 1
2 4 2
3 5 1
4 6 1

标准方法,

SELECT 
p.*,
c.*,
x.*

FROM pages AS p

LEFT JOIN pages_structures AS x
ON x.page_id = p.page_id

LEFT JOIN pages_contents AS c
ON c.content_id = x.content_id

WHERE p.parent_id = '1'
AND p.page_id != '1'

结果(它将行列为 4 个项目),

page_id   page_title  parent_id   content_text    order_in_page
2 aa 1 text one aa 1
2 aa 1 text two aa 2
3 ab 1 text one ab 1
4 ac 1 text one ac 1

如您所见,两行 page_id 2一行 分别对应 34。您如何使用如下所示的标准方法将数据显示为 HTML(如先前 question 中的一个答案中所建议的那样)?

echo $page[0]['page_title'];
echo $page[0]['content_text'];

但是有了set-based,我可以用这个,

SELECT
page_id,
page_title,
MAX(IF(order_in_page = 1, content_text, NULL)) AS content_1,
MAX(IF(order_in_page = 2, content_text, NULL)) AS content_2,
.
.
.
FROM
pages AS p LEFT JOIN
pages_structures AS x ON x.page_id = p.page_id LEFT JOIN
pages_contents AS c ON c.content_id = x.content_id
WHERE
p.parent_id = '1'
AND
p.page_id != '1'
GROUP BY page_id

在 PHP 中,

foreach($items as $item)
{
echo '<li><h3>'.$item['page_title'].'</h3>';
echo '<p>'.$item['content_1'].'</p>';
echo '<p>'.$item['content_2'].'</p></li>';
}

HTML(它将行列为 3 个项目,这是正确的),

<li>
<h3>aa</h3>
<p>text one aa</p>
<p>text two aa</p>
</li>

<li>
<h3>ab</h3>
<p>text one ab</p>
<p></p>
</li>

<li>
<h3>ac</h3>
<p>text one ac</p>
<p></p>
</li>

希望这是有道理的!

最佳答案

使用标准方法,您只需在变量中跟踪当前页面,当页面更改时,您将滚动到新的列表项。

关于php - MySQL:多行结果的标准方法 VS 基于集合的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9337903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com