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