2010-03-31 96 views
3

基本上我从table1中提取一个Id,使用该id在table2中查找一个站点ID,然后需要使用数组中的站点ID,implode和查询表3中的站点名称。我不能正确内插阵列,我得到一个错误,然后使用一个while循环。将查询结果放入数组然后Implode?

随着while循环输出简单地说:数组

$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。

回答

2

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

... AND MarketID = '$comma_separated' 

这是说,MarketID被存储在数据库中的一个逗号分隔的列表。也许你的意思是这样的:

... AND MarketID IN ($comma_separated) 

而且,你也不需要进行多次查询,你可以使用JOIN:

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本,而不是让你的最终导致一个查询而不是三个。

+0

+1,加盟是正确的建议 – user187291 2010-03-31 08:39:45

+0

谢谢,我没有带过与这么多表那里有20多个工作,所以它得到了一个有点势不可挡为了我。 – jason 2010-03-31 08:50:01

+0

不得不做一个临时表,以最终使它顺利发生,因为预订表有这么多的数据。 再次感谢,我从来没有使用JOIN,因此学习,使事情变得更容易。 – jason 2010-03-31 11:02:31

1

是不是可以在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') 
0

或者你可以使用你的方式,在这种情况下,你只需要对mysql使用相同的IN语句。

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

也许你会在SQL中遇到类型不匹配的错误。你的第二个sql查询应该是:

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

其他人已经写了关于SQL查询。但也要确保你正确引用数组索引。因此,而不是

$SIteID[] = $newArray[SIteID]; 

做到这一点

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