我正在尝试显示最近的20篇文章,以及它们各自的标签(每篇文章大约有3-4个标签)。我有一个文章表和一个标签表,每篇文章都有3-4行带有文章id的标签。
我知道该怎么做:
$result = $mysqli->query("SELECT * FROM items LIMIT 0,24 ");
while ($row = $result->fetch_object()) {
$result2 = $mysqli->query("SELECT tag FROM tags WHERE item_id = ".$row->id);
while ($row2 = $result2->fetch_object()) {
echo $row2 . '<br>';
}
}
当我尝试连接时,每篇文章都出现在3-4行中。
这看起来真的很不干净。有没有更优雅的方法来提取每篇文章的标签?我也乐于听到存储数据的不同方式,我刚刚开始这个项目……
发布于 2012-06-11 22:26:33
您可以尝试从项目限制0,24中选择不同的itemID
这将为每个itemID仅返回一个结果
发布于 2012-06-11 22:33:22
好的做法是连接两个表,但因为从理论上讲,一篇文章可以有很多标签,这会产生一些开销。
因此,在这种情况下,最好的做法是将第一个查询的结果存储在一个关联数组中,其中的关键字是项in:
$items = array();
$result = $mysqli->query("SELECT * FROM items LIMIT 0,24 ");
while ($row = $result->fetch_object()) {
$items[$row->item_id] = $row;
$items[$row->item_id]->tags = array();
}
在此迭代之后,执行第二个查询,但在所有项ID上使用选择器:
$result2 = $mysqli->query("SELECT item_id, tag FROM tags WHERE item_id IN (".implode(',', array_keys($items)).")");
while ($row2 = $result2->fetch_object()) {
$items[$row2->item_id]->tags[] = $row2->tag;
}
这样,您只需2次查询即可填充完整的多维数组。
https://stackoverflow.com/questions/10981941
复制相似问题