0
$sqlCommand2 = "SELECT blogid FROM blogtags WHERE tag='$pageid'";
$query2 = mysqli_query($myConnection, $sqlCommand2) or die (mysqli_error());
while ($row = mysqli_fetch_array($query2)) {
    $selectedtag = $row['blogid'];
}   

这个 sql 选择应该给 $selectedtag 1,2,3 的值,但它只给出 3 的值。最后一行等于 pageid。谁能弄清楚为什么它没有拉所有行而只拉最后一行?

4

6 回答 6

1

这是因为您将值分配给循环内的变量。所以最后一个值会覆盖所有其他值。请改用数组。

更改$selectedtag = $row['blogid'];$selectedtag[] = $row['blogid'];

于 2013-04-17T15:12:45.180 回答
1

尝试:

$selectedtag = array();
while ($row = mysqli_fetch_array($query2)) {
    $selectedtag[] = $row['blogid'];
}

print_r($selectedtag);
于 2013-04-17T15:12:51.773 回答
1

您不断$selectedtag用最新的行迭代的 blogid 值覆盖。

您应该使用这些值创建一个数组,或者对循环中的值执行某些操作。

这完全取决于您打算如何处理数据。

如果你想用收集的 ID 搜索博客,你最好创建一个更大的查询,而不是搜索博客 ID 循环那些并搜索博客。

你可以这样做:

SELECT id, title, content, author, date
FROM blogs
WHERE id IN 
  (SELECT blogid FROM blogtags WHERE tag ='$pageid')

上面是一个非常粗略的示例,对您的列/表命名知之甚少,但是通过上面的查询,您应该得到带有特定标签的博客的结果。

祝你好运!

于 2013-04-17T15:13:36.573 回答
0

改成:

  $sqlCommand2 = "SELECT blogid FROM blogtags WHERE tag='$pageid'";
        $query2 = mysqli_query($myConnection, $sqlCommand2) or die (mysqli_error());
                    while ($row = mysqli_fetch_array($query2)) {
                    $selectedtag[] = $row['blogid'];
                    } 

$selectedtag[] <--将值放入数组;

于 2013-04-17T15:13:28.977 回答
0

查询中的 WHERE 子句是阻止它的原因。

如果$pageid变量的值为 3,则查询计算结果为:

SELECT COLUMN blogid FROM TABLE blogtags ONLY WHERE THE COLUMN tag HAS THE VALUE OF 3

所以基本上,查询完全按照它所说的去做。

如果您想选择前两行,那么您必须在 WHERE 子句中发挥创意:

SELECT blogid FROM blogtags WHERE tag <= $pageid AND tag > $pageid - 3

这将选择标签小于等于 3 且大于 3 - 3 = 0 的所有内容;

因此,标签可以是 3、2 或 1。

编辑

我可能误解了这个问题,但我会在这里留下我的答案,以防它帮助其他偶然发现它的人。

于 2013-04-17T15:15:18.530 回答
0

退出 mysqli 并使用PDO。它拥有您需要的一切:

$stm = $pdo->prepare("SELECT blogid FROM blogtags WHERE tag=?");
$stm->execute(array($pageid));
$rows = $stm->fetchAll(PDO::FETCH_COLUMN, 0);
于 2013-04-17T15:15:45.080 回答