我不确定如何搜索这个问题我还有,或者我是否使用了正确的术语。
我有一张包含各种记录的表格,每条记录都有一个类别集。我想查询一次表并将结果输出到网页的相关部分。
到目前为止我做了什么:
$result_f1 = $db->query("SELECT * FROM files WHERE user_id = $user_id ") or die('cannot show tables');
... some html ...
if($result_f1) {
while($row3 = $result_f1->fetch_object()) {
if ($row3->category == "image") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row3->filename,'" alt="Photo"></div>';
}
}
}
...more html onto next section...
if($result_f1) {
while($row4 = $result_f1->fetch_object()) {
if ($row4->category == "vehicle") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row4->filename,'" alt="Photo"></div>';
}
}
}
所以我希望将记录与&#34;图像&#34;匹配。类别和&#34;车辆&#34;的下一部分;部分。
使用上面的代码,它只显示while循环的记录,而不是第二个循环。我应该做些什么呢?
答案 0 :(得分:2)
这是因为您使用fetch_object
方法获取数据。
而fetch_object使用fetch_all如下:
$result_f1 = $db->query("SELECT * FROM files WHERE user_id = $user_id ") or die('cannot show tables');
$dataSet = $result_f1->fetch_all(MYSQLI_ASSOC);
if($dataSet) {
foreach($dataSet as $row3) {
if ($row3['category'] == "image") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row3['filename'],'" alt="Photo"></div>';
}
}
}
...more html onto next section...
if($dataSet) {
foreach($dataSet as $row4) {
if ($row4['category'] == "vehicle") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row4['filename'],'" alt="Photo"></div>';
}
}
}
这是因为fetch_ [object / array / assoc]只返回一个结果行而不返回所有数据集。
例如:
mysqli_result :: fetch_assoc - mysqli_fetch_assoc - 获取结果行 作为关联数组
当你在迭代这个数据集时,幕后的php会使用像next&amp;这样的函数。 current循环遍历该对象m,而next
函数只是将对象/数组指针提前一个。
next - 推进数组的内部指针
在第一次迭代结束时,您将到达[object / array]指针的最后一个值,因此在下一次迭代时,您将无法迭代该对象,除非您{ {3}}指针指向0
如下:
$result_f1 = $db->query("SELECT * FROM files WHERE user_id = $user_id ") or die('cannot show tables');
... some html ...
if($result_f1) {
while($row3 = $result_f1->fetch_object()) {
if ($row3->category == "image") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row3->filename,'" alt="Photo"></div>';
}
}
}
...more html onto next section...
$result_f1->data_seek(0);
if($result_f1) {
while($row4 = $result_f1->fetch_object()) {
if ($row4->category == "vehicle") {
echo '<div class="col-sm-6"><img class="img-responsive" src="/site/data/' .$user_id. '/',$row4->filename,'" alt="Photo"></div>';
}
}
}
答案 1 :(得分:1)
发生这种情况的原因是因为一旦第一个while循环结束,结果集就为空。您需要获取完整的结果集并将其放入变量中。
类似
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Fetch all of the values of the first column */
$results = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
然后
foreach (results as key => value){
// use hte results
}
答案 2 :(得分:1)
假设您使用的是MySQLi,可以使用WHERE user_id = $user_id AND category="image"
重置指针。
http://php.net/manual/en/mysqli-result.data-seek.php
您应该考虑为每个部分(SELECT *
)执行不同的查询。并且可能不需要获取所有字段(urlpatterns = [
url(
r'^model1/$',
ListView.as_view(model=Model1),
name='model1_list'
),
url(
r'^model2/$',
ListView.as_view(model=Model2),
name='model2_list'
),
]
)。