Php 我可以从一个表中随机选择一行,并使用静态标识符在另一个表中选择相应的数据吗?
下面的脚本最初打算随机选择一行,它可以做得很好,但是,我不知道如何修改它,使用名为“nid”的列ID从第二个表中选择数据,这在两个表中都是相同的:Php 我可以从一个表中随机选择一行,并使用静态标识符在另一个表中选择相应的数据吗?,php,mysql,drupal,Php,Mysql,Drupal,下面的脚本最初打算随机选择一行,它可以做得很好,但是,我不知道如何修改它,使用名为“nid”的列ID从第二个表中选择数据,这在两个表中都是相同的: $conn = mysqli_connect($host,$username,$password, $database) or die(mysql_error ()); $total_rows = 5; $selected_row = mt_rand(0, $total_rows); $query="SELECT * FROM `n
$conn = mysqli_connect($host,$username,$password, $database) or die(mysql_error ());
$total_rows = 5;
$selected_row = mt_rand(0, $total_rows);
$query="SELECT * FROM `node` LIMIT $selected_row, 1;";
$result=$conn->query($query);
while($row = $result->fetch_assoc()) {
$node=$row["nid"];
echo $row["title"];
$query2="SELECT * FROM `field_data_body` LIMIT $node, 1;";
$result2=$conn->query($query2);
while($row = $result->fetch_assoc()) {
echo $row["body_value"];
}
诚然,上述方法并不真正有效,但我迫不及待地想找到一个我所追求的例子
这些表位于Drupal站点的数据库中,因此title字段和body_值字段位于两个不同的表中;最后,我想回显一个结果,该结果是随机选择的节点的title和body_值的匹配集
具体说到这个脚本,我想使用nid查找第二个表的对应行
这可能吗
从单个表中选择所需数据的有效位格式如下:
$total_rows = 5;
$selected_row = mt_rand(0, $total_rows);
$query="SELECT * FROM `field_data_body` LIMIT $selected_row, 1;";
$result=$conn->query($query);
while($row = $result->fetch_assoc()) {
echo $row["body_value"];
}
?>
更新:
在一位评论者的建议下,我使用了连接,结果是:
$conn = mysqli_connect($host,$username,$password, $database) or die(mysql_error ());
$total_rows = 5;
$selected_row = mt_rand(0, $total_rows);
//Use the result in your limit.
$query="SELECT a.nid, a.title, b.entity_id, b.body_value
FROM node a, field_data_body b
WHERE a.nid = b.entity_id LIMIT $selected_row, 1;";
$result=$conn->query($query);
while($row = $result->fetch_assoc()) {
echo $row["title"];
echo " | ";
echo $row["body_value"];
}
它工作得很好。由于您已经解决了问题,因此需要在启动新连接之前关闭以前的连接,或者释放结果,以供将来参考
$conn = mysqli_connect($host,$username,$password, $database) or die(mysql_error ());
$total_rows = 5;
$selected_row = mt_rand(0, $total_rows);
$query="SELECT * FROM `node` LIMIT $selected_row, 1;";
$result=$conn->query($query);
while($row = $result->fetch_assoc()) {
$node=$row["nid"];
echo $row["title"];
$result->close(); // close $result
$query2="SELECT * FROM `field_data_body` LIMIT $node, 1;";
$result2=$conn->query($query2);
while($row = $result->fetch_assoc()) {
echo $row["body_value"];
}
$result2->close(); // close $result2
我还注意到,您也没有关闭您发布的更新上的连接,这将导致您稍后再次遇到相同的问题。如果这只是要选择一条记录,您不必定义限制,而是可以使用随机生成的值,在WHERE中使用它来选择行 您可以将这两个表连接起来。除此之外,您的代码还有一个潜在的问题。它依赖于至少5条记录的存在。您可以通过在查询中加入随机化来避免这种情况。然后,代码将被删除
$conn = mysqli_connect($host,$username,$password, $database) or die(mysql_error());
$query = "SELECT n.*, b.* FROM `node` AS n LEFT JOIN `field_data_body` AS b ON n.nid=b.nid ORDER BY REVERSE(RAND()) LIMIT 0, 1;";
$result = $conn->query($query);
$row = $result->fetch_assoc();
$result->close();
echo $row["title"];
echo $row["body_value"];
REVERSE()
函数使来自RAND()
的结果更加随机。如果你愿意的话,你可以省略它。我相信你只是想要一份工作。谢谢。这似乎正是我想要的。返回随机记录: