我希望能提供一些帮助,以便在可能的情况下提高查询效率。我有两张桌子。一个包含可用内容类型,另一个包含通过类型ID链接到类型表的内容。
我正在尝试从内容表中进行选择,并按type_id对结果进行分组。我目前正在循环中使用查询来执行此操作,因此它将从第二个表中再次为每个type_id选择。是否有更好/更有效的方法来做到这一点?
以下是我当前的表格和查询:
type_id type
1 type 1
2 type 2
id title type_id content
1 test1 1 test content 1
2 test2 2 test content 2
3 test3 1 test content 3
$query="select type_id, type from type_table";
foreach($query as $type){
$query="select title, content from content_table WHERE type_id=$type['type_id']";
}
我希望这是有道理的。
由于
答案 0 :(得分:1)
您的示例似乎从内容表中选择所有可能的值,尽管一次只能批量处理给定类型。所以select title, content from content_table
肯定会一次完成这一切,而不会循环。
要将每个type_id放入一个新div中,您可以执行以下操作:
SELECT title, content, t.type_id, t.type
FROM content_table c
JOIN type_table t ON t.type_id = c.type_id
ORDER BY t.type_id
// pseudo-code
prev_type_id = -1
print "<div>"
foreach row:
if type_id != prev_type_id:
prev_type_id = type_id
print "</div><div>"
print "</div>"
(根据评论编辑)
答案 1 :(得分:0)
使用加入和排序依据。类似的东西(无法保证语法的正确性):
SELECT
c.title, c.content, t.type_id, t.type
FROM
type_table t, content_table c
WHERE
c.type_id = t.type_id
ORDER BY
t.type_id
答案 2 :(得分:0)
当然,你可以加入这两张桌子。
但是,在此示例中,您甚至不需要使用type_table。您可以按type_id排序查询:
select title, content from content_table order by type_id;
答案 3 :(得分:0)
预期结果是什么?
这就是我想你想要的。
$sql = 'SELECT t.type, c.title, c.content
FROM `content_table` c
INNER JOIN `type_table` t ON c.type_id = t.type_id
ORDER BY c.type_id ASC'
// Dont use a foreach-loop to loop over the results. While-loop is ideal
while ($row = <query or fetch from resultset here>) {
..
}