Поместить результаты запроса в массив, а затем взорвать? - PullRequest
3 голосов
/ 31 марта 2010

Обычно я извлекаю идентификатор из таблицы1, использую этот идентификатор для поиска идентификатора сайта в таблице2, затем мне нужно использовать идентификаторы сайта в массиве, выполнить развертку и запросить таблицу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.

Ответы [ 5 ]

2 голосов
/ 31 марта 2010

Я был бы удивлен, если это то, что вы имеете в виду:

... 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, чтобы получить окончательный результат в одном запросе вместо трех.

1 голос
/ 31 марта 2010

Разве нельзя сделать это в запросе 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 голосов
/ 31 марта 2010

Другие уже написали о запросе SQL. Но также убедитесь, что вы правильно указали индексы массива. Так что вместо

$SIteID[] = $newArray[SIteID];

сделать это

$SIteID[] = $newArray['SIteID'];
0 голосов
/ 31 марта 2010

Возможно, вы получаете ошибку несоответствия типов в SQL. Ваш второй SQL-запрос должен быть:

$sql = "SELECT SIteID FROM bookings WHERE BSH_ID = '1' AND MarketID IN ($comma_separated)";
0 голосов
/ 31 марта 2010

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

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