数据库结构两个表用PHP

时间:2014-04-16 00:22:05

标签: php mysql

好。我有这两张桌子,我一整天都在苦苦挣扎。我最终得到的东西在某些情况下有效,而有些则没有。因此,我将解释这两个表的关系如何。

两个表的说明:

对象:这个表的工作是持有很多对象,这些对象包含有关它的信息。它包含名称,图像源等。

House_room1:此表用于我的应用程序中的所有用户。每个用户都使用user_id表示。

打印出与用户登录时具有相同user_id的所有对象。  我的意思是用户拥有的所有对象都应打印出来。 所以有这两个表的例子:

对象(表格)

Object

house_room1(表)

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个点之间没有任何值?

1 个答案:

答案 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
}