Php 将查询结果放入数组然后内爆?
基本上,我从表1中提取一个Id,使用该Id在表2中查找站点Id,然后需要在数组中使用站点Id,内爆,并在表3中查询站点名称。我无法正确地内爆数组。首先,我得到一个错误,然后使用了while循环 在while循环中,输出仅表示:ArrayPhp 将查询结果放入数组然后内爆?,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:
$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,并学习如何解释查询结果。如果遇到问题,你可以问一个新问题,如何加快你的慢查询。