2010-03-31 1 views
3

В основном я вытаскиваю идентификатор из таблицы1, используя этот идентификатор, чтобы найти идентификатор сайта в таблице2, тогда вам нужно использовать идентификаторы сайта в массиве, implode и таблице запросов3 для имен сайтов. Я не могу взорвать массив правильно, сначала я получил ошибку, а затем использовал цикл while.Поместите результаты запроса в массив, затем введите Implode?

С петлей, а выход просто говорит: 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-запрос, чтобы вытащить имена из Таблица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

+0

Спасибо, я havn't когда-либо приходилось работать с таким количеством столов Theres более 20, так что есть немного подавляющим для меня. – jason

+0

Пришлось сделать временную таблицу, чтобы, наконец, сделать ее плавной, так как в таблице заказов столько данных. Снова спасибо, я никогда не использовал JOIN, так что узнал, что просто сделал вещи намного проще. – jason

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

Или вы можете использовать свой путь, в этом случае вам просто нужно использовать тот же оператор IN для mysql.

$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']; 
Смежные вопросы