提问人:Anan 提问时间:4/19/2022 最后编辑:DarkBeeAnan 更新时间:4/19/2022 访问量:53
使用 for each 循环回显每个相应主题下的内容?
Echoing out contents under each respective topic using for each loop?
问:
我的表格看起来像
同上 | 主题 | 句 |
---|---|---|
1 | 谷歌 | bla bla..1 |
2 | 优酷 | bla bla..2 |
3 | 亚马逊河 | bla bla..3 |
4 | 谷歌 | bla bla..4 |
5 | 谷歌 | bla bla..5 |
6 | 优酷 | bla bla..6 |
现在我想要像 Udemy 课程列表一样。 在每个主题下,按各自的顺序列出所有句子。
例如。我想要的,
Google ^
bla bla..1
bla bla..4
bla bla..5
YouTube ^
bla bla..2
bla bla..6
Amazon ^
bla bla..3
注意:谷歌不应该排在第一位,我认为一切都是根据 id 排序的。 想法:就像 Udemy 在他们的一门课程中一样,有一个介绍主题,该主题下有一些视频,还有另一个称为基本的主题,该主题下也有一些内容/视频等,最后有结束课程主题,在该主题下有一些列出的内容/视频。
所以现在假设我说的主题是上表的主题,内容是上表的句子。
在本例中,我想显示名为 Google 的主题,并在该主题下显示它的句子。YouTube 也是如此,很快......
我尝试的是:呼应所有主题和句子,但这里的问题是我已经显示了每个主题下的所有内容,即有 3 个 Google、2 个 YouTube 和一个亚马逊 主题在他们各自的句子上。
$select = $db_conn->query("SELECT * FROM contents WHERE email = '$email' ORDER BY id");
foreach($select as $select_data){
$topic = $select_data['topic'];
$sentence = $select_data['sentence'];
$id = $select_data['id'];
echo "<h2>$topic</h2>"; // this should be echo out once only if the same topic is there
echo "<p>$sentence</p>";
}
那么我该如何解决这个问题呢?
答:
0赞
mhhabibi
4/19/2022
#1
因为你把它放在循环中,它重复了三次,你可以这样做以避免重复
$prev_id = 0;
foreach($select as $select_data){
$topic = $select_data['topic'];
$sentence = $select_data['sentence'];
$id = $select_data['id'];
if($prev_id != $id)
echo "<h2>$topic</h2>";
echo "<p>$sentence</p>";
$prev_id = $id;
}
在此代码中,对于每个 ID Echo 主题,只需一次,您就可以获得所有内容;当您收到一封电子邮件时
echo "<h2>$select[0]['topic']</h2>";
foreach($select as $select_data){
$sentence = $select_data['sentence'];
$id = $select_data['id'];
echo "<p>$sentence</p>";
}
评论
0赞
Anan
4/19/2022
我已经尝试过了,但不幸的是它不起作用。无论如何,谢谢你的帮助。
1赞
Nick
4/19/2022
#2
获得所需结果的一种方法是获取主题列表及其最小值,然后将其发送到原始表,按主题的最小值排序,然后按行的值排序。例如:id
JOIN
id
id
SELECT c.*
FROM (
SELECT MIN(id) AS id, topic
FROM contents
GROUP BY topic
) t
JOIN contents c ON c.topic = t.topic
ORDER BY t.id, c.id
查询输出(用于示例数据):
id topic sentence
1 Google bla bla..1
4 Google bla bla..4
5 Google bla bla..5
2 YouTube bla bla..2
6 YouTube bla bla..6
3 Amazon bla bla..3
现在您的输入数据已排序,您只能在标题发生变化时输出标题,例如
$last_topic = '';
foreach($select as $select_data){
$topic = $select_data['topic'];
$sentence = $select_data['sentence'];
$id = $select_data['id'];
if ($topic != $last_topic) echo "<h2>$topic</h2>";
$last_topic = $topic;
echo "<p>$sentence</p>";
}
评论
0赞
Anan
4/19/2022
你节省了我的时间,给了我真正的解决方案。它的工作原理就像我想要的一样。非常感谢。
上一个:拆分数据库中的多个字符串
评论