php – 我可以从一个表中随机选择一行并使用静态标识符来选择另一个表中的相应数据吗?

下面的脚本最初是为了随机选择一行,它可以做得很好,但是,我无法弄清楚如何修改它以使用名为“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 `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_value字段位于两个不同的表中;最后,我想回应一个结果,它是随机选择的节点的一组匹配的标题和body_value.

说到这个脚本,我想使用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

我还注意到你没有关闭你发布的UPDATE上的连接,这将导致你以后再次遇到同样的问题.

点赞