是否有可能使用一个mysql查询来实现这一目标?

时间:2011-01-09 12:32:21

标签: php mysql

我希望能提供一些帮助,以便在可能的情况下提高查询效率。我有两张桌子。一个包含可用内容类型,另一个包含通过类型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']";
}

我希望这是有道理的。

由于

4 个答案:

答案 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>) {
 ..
}