Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP实现两个表的数据库结构_Php_Mysql - Fatal编程技术网

用PHP实现两个表的数据库结构

用PHP实现两个表的数据库结构,php,mysql,Php,Mysql,好的。我有这两张桌子,我一整天都在挣扎。我最终得到的东西在某些情况下是有效的,而在其他情况下则不是。因此,我将解释这两个表之间的关系 对两个表格的解释: 对象:这个表的任务是保存很多对象,这些对象包含关于它的信息。它包含名称、图像源等 House_room1:此表用于我的应用程序中的所有用户。每个用户都用用户id表示 应打印出与登录用户具有相同用户id的所有对象。 我在这里的意思是,用户拥有的所有对象都应该打印出来。 下面是两个表格示例: 对象(表) house_room1(桌子) 因此,如

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

对两个表格的解释:

对象:这个表的任务是保存很多对象,这些对象包含关于它的信息。它包含名称、图像源等

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

应打印出与登录用户具有相同用户id的所有对象。 我在这里的意思是,用户拥有的所有对象都应该打印出来。 下面是两个表格示例:

对象(表)

house_room1(桌子)

因此,如果user\u id=1,则使用该特定的user\u id打印house\u room1中的所有内容

这些内容一次只能打印一份。因此,应该有一个迭代器遍历用户拥有的所有对象

这是我到目前为止提出的问题:

$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('选择ref_id、x、y、z、src、旋转、链接、div_id、objects.object_id
从house_room1
内部联接对象
在house\u room1上。对象\u id=对象。对象\u id
其中house_room1.user_id=?');
$stmt->bind_param('i',$GLOBALS['userid_v']);
如果($stmt->execute()){
而($row=$stmt->fetch()){
如果($row['link']!=“”){
回音“;}
}
}否则{
echo“出现了严重错误”。$mysqli->错误;
}

这会打印图像,但它在
$row['src']
$row
点上没有任何值?

您通常会为该用户返回所有结果(而不是按对象ID),然后使用
->fetch_assoc()
一次返回一行(1个对象),并循环该行<代码>获取->()在没有更多结果时将返回false,因此您可以将其用作循环的退出条件。 也可能您没有执行查询。您不应该在循环中准备查询,因为这首先会抹去准备好的查询的效率

如果您想一次打印一个对象,您应该执行以下操作

$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
}

“一次打印一份”是什么意思?是什么触发的?每个用户点击一次?一个表的每一行上都有一个?只需在object_id上留下join,并像在where子句中一样使用user_id。您不需要对object_id进行限制。@A.O.表中每行一个。谢谢你的邀请。所以它一次只取出一个对象。@Rufinus我试过你说的,但在user_id=2上没有打印出来。hmm@Ohgodwhy嗯,我必须
选择一列才能在同一查询中使用它吗?我试过了,但对我来说没什么区别?还是我错了?你好,谢谢这个代码,我真的应该考虑这样做,我只是希望查询工作现在是怎样的,然后以我的方式更好的方法稍后。谢谢但它可能根本无法正常工作,这取决于您如何实现迭代器,这就是迭代器处于for循环中的问题:
for($i=0;$i<$count\u total\u objects;$i++){
不管怎样,我还是应该尝试一下你的方法。我需要一些时间来思考。看,用户2只有一个对象id=1,对象id=6,所以如果他们总共有2个对象,迭代器将永远不会达到6。另外,用户1有6个id为4的对象,迭代器会打印所有对象吗?是的,没错。注意,它有要进入
SELECT
语句,除非添加
name
,否则不会得到它,但
$row['src']
将起作用。
$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
}