Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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_Drupal - Fatal编程技术网

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

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

下面的脚本最初打算随机选择一行,它可以做得很好,但是,我不知道如何修改它,使用名为“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_值字段位于两个不同的表中;最后,我想回显一个结果,该结果是随机选择的节点的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()
的结果更加随机。如果你愿意的话,你可以省略它。

我相信你只是想要一份工作。谢谢。这似乎正是我想要的。返回随机记录: