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

Php 将查询结果放入数组然后内爆?

Php 将查询结果放入数组然后内爆?,php,mysql,arrays,implode,Php,Mysql,Arrays,Implode,基本上,我从表1中提取一个Id,使用该Id在表2中查找站点Id,然后需要在数组中使用站点Id,内爆,并在表3中查询站点名称。我无法正确地内爆数组。首先,我得到一个错误,然后使用了while循环 在while循环中,输出仅表示:Array $mysqli = mysqli_connect("server", "login", "pass", "db"); $sql = "SELECT MarketID FROM marketdates WHERE Date = '2010-04-04 00:00:

基本上,我从表1中提取一个Id,使用该Id在表2中查找站点Id,然后需要在数组中使用站点Id,内爆,并在表3中查询站点名称。我无法正确地内爆数组。首先,我得到一个错误,然后使用了while循环

在while循环中,输出仅表示:Array

$mysqli = mysqli_connect("server", "login", "pass", "db");
$sql = "SELECT MarketID FROM marketdates WHERE Date = '2010-04-04 00:00:00' AND VenueID = '2'";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));
$dates_id = mysqli_fetch_assoc ( $result );
$comma_separated = implode(",", $dates_id);
echo $comma_separated; //This Returns 79, which is correct.

$sql = "SELECT SIteID FROM bookings WHERE BSH_ID = '1' AND MarketID = '$comma_separated'";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));
// This is where my problems start
$SIteID = array();

while ($newArray = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
  $SIteID[] = $newArray[SIteID];
}

$locationList = implode(",",$SIteID);

?>

基本上,我需要做的是将查询结果正确地移动到一个数组中,我可以在第三个查询中使用该数组从表3中提取名称。

在mysql查询中不可能这样做吗

SELECT SIteID FROM bookings WHERE BSH_ID = '1' AND MarketID IN (SELECT MarketID FROM marketdates WHERE Date = '2010-04-04 00:00:00' AND VenueID = '2')

或者您可以使用自己的方式,在这种情况下,您只需要对mysql使用相同的in语句

$sql = "SELECT SIteID FROM bookings WHERE BSH_ID = '1' AND MarketID IN (".$comma_separated.")";

可能您在SQL中遇到了类型不匹配错误。您的第二个sql查询应该是:

$sql = "SELECT SIteID FROM bookings WHERE BSH_ID = '1' AND MarketID IN ($comma_separated)";

如果这是你的意思,我会很惊讶:

... AND MarketID = '$comma_separated'
这意味着MarketID以逗号分隔的列表形式存储在数据库中。也许你的意思是:

... AND MarketID IN ($comma_separated)
此外,您不需要进行多个查询,您可以使用连接:

SELECT SIteID
FROM marketdates
JOIN bookings
ON marketdates.MarketID = bookings.MarketID
WHERE bookings.BSH_ID = '1'
  AND marketdates.Date = '2010-04-04 00:00:00'
  AND marketdates.VenueID = '2'

类似地,您可以将表3与此连接起来,以在一个查询中获得最终结果,而不是在三个查询中获得最终结果。

其他人已经编写了关于SQL查询的文章。但也要确保正确引用数组索引。所以不是

$SIteID[] = $newArray[SIteID];
这样做

$SIteID[] = $newArray['SIteID'];

谢谢,我从来没有使用过这么多的表,有20多个表,所以对我来说有点难以承受。由于预订表有这么多数据,我不得不做一个临时表来最终使其顺利进行。再次感谢,我从未使用过JOIN-so学习,这让事情变得更简单。@jason:如果您的查询运行得太慢,很可能是因为您缺少一个重要的索引,或者是因为您的查询方式导致该索引无法使用。您可能不需要创建临时表,只需要添加正确的索引或修复查询。我认为这个问题有点过于深入和离题,无法解释更多细节,但我建议您对查询运行explain,并学习如何解释查询结果。如果遇到问题,你可以问一个新问题,如何加快你的慢查询。