好。我有这两张桌子,我一整天都在苦苦挣扎。我最终得到的东西在某些情况下有效,而有些则没有。因此,我将解释这两个表的关系如何。
两个表的说明:
对象:这个表的工作是持有很多对象,这些对象包含有关它的信息。它包含名称,图像源等。
House_room1:此表用于我的应用程序中的所有用户。每个用户都使用user_id
表示。
打印出与用户登录时具有相同user_id
的所有对象。
我的意思是用户拥有的所有对象都应打印出来。
所以有这两个表的例子:
对象(表格)
house_room1(表)
所以IF user_id = 1 PRINT来自house_room1与该特定user_id的所有内容。然而,这是一个钩子!
这些东西一次只能打印出来。因此应该有一个迭代器遍历用户拥有的所有对象。
这是我到目前为止所做的查询:
$stmt->prepare('SELECT ref_id, x, y, z, src, rotation, link, div_id
FROM house_room1
INNER JOIN objects
ON house_room1.object_id=objects.object_id
WHERE house_room1.object_id= ? AND house_room1.user_id = ?');
$stmt->bind_param('ii', $i, $GLOBALS['userid_v']); // $i is the iterator
然而,这并没有达到我的预期,而且有点难以预测最新情况。希望在这里找到一些帮助,提前谢谢!
编辑:
$stmt = $mysqli->stmt_init();
$stmt->prepare('SELECT ref_id, x, y, z, src, rotation, link, div_id,objects.object_id
FROM house_room1
INNER JOIN objects
ON house_room1.object_id=objects.object_id
WHERE house_room1.user_id = ?');
$stmt->bind_param('i', $GLOBALS['userid_v']);
if ($stmt->execute()) {
while($row = $stmt->fetch()) {
if ($row['link'] != "") {
echo '<a href="' . $row['link'] . '"> ';
}
if ($row['div_id'] != "") {
echo '<a href="#" onClick="' . $row['div_id'] . '"> ';
}
echo '<img src="' . $row['src'] . $row['rotation'] .'.png" id="object' . $row['ref_id'] . '" class="object' . $row['ref_id'] . '" rel="'.$row['rotation'].'" alt="'.$row['ref_id'].'" style="position:absolute; left:' . $row['x'] . 'px; top:' . $row['y'] . 'px; z-index:'. $row['z'] . ';">'; if ($row['x'] != 0) { echo'</a>'; }
}
} else {
echo 'Something went terrible wrong' . $mysqli->error;
}
这会打印图像,但它在$row['src']
或$row
个点之间没有任何值?
答案 0 :(得分:1)
您通常做的是返回该用户的所有结果(而不是通过对象ID),然后使用->fetch_assoc()
一次返回一行(1个对象),然后循环。一旦没有更多结果,fetch->()
将返回false,因此您可以将其用作循环的退出条件。
你也可能没有execute
查询。并且您不应该在循环内准备查询,因为这会首先消除准备好的查询的效率。
如果你想一次打印一个对象,你应该做类似的事情
$stmt->prepare('SELECT ref_id, x, y, z, src, rotation, link, div_id,objects.object_id
FROM house_room1
INNER JOIN objects
ON house_room1.object_id=objects.object_id
WHERE house_room1.user_id = ?');
$stmt->bind_param($GLOBALS['userid_v']);
$stmt->execute();
$stmt->bind_result($ref_id,$x,$y,$z,$src,$rotation,$link,$div_id,$objectid);
while($stmt->fetch()) {
// each of the variables in bind_result now reference the current row
}