选择多行PHP / MySQL

时间:2013-04-17 15:11:02

标签: php mysql

$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 select应该给$ selectedtag值1,2,3,但它只给出值3.最后一行等于pageid。任何人都可以弄清楚为什么它没有拉动所有行而只是最后一行?

6 个答案:

答案 0 :(得分:1)

这是因为您要为循环内的变量赋值。所以最后一个值会覆盖所有其他值。改为使用数组。

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

答案 1 :(得分:1)

尝试:

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

print_r($selectedtag);

答案 2 :(得分:1)

您继续使用最新行的迭代的blogid值覆盖$selectedtag

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

这完全取决于您计划对数据做些什么。

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

你可以这样做:

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

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

祝你好运!

答案 3 :(得分: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 []< - 将值放入数组中;

答案 4 :(得分: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。

修改

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

答案 5 :(得分:0)

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

$stm = $pdo->prepare("SELECT blogid FROM blogtags WHERE tag=?");
$stm->execute(array($pageid));
$rows = $stm->fetchAll(PDO::FETCH_COLUMN, 0);