3

基本的に、テーブル1からIDを取得し、そのIDを使用してテーブル2でサイトIDを検索します。次に、配列内のサイトIDを使用し、インプロードし、テーブル3でサイト名を照会する必要があります。最初にエラーが発生し、次にwhileループを使用して、配列を正しく内包できません。

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番目のクエリで使用してtable3から名前を取得できます。

4

5 に答える 5

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'

同様に、代わりにtable3をこれと結合して、3つではなく1つのクエリで最終結果を取得できます。

于 2010-03-31T08:35:14.927 に答える
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')
于 2010-03-31T08:28:53.367 に答える
0

または、自分のやり方を使用することもできます。その場合は、mysqlに対して同じINステートメントを使用する必要があります。

$sql = "SELECT SIteID FROM bookings WHERE BSH_ID = '1' AND MarketID IN (".$comma_separated.")";
于 2010-03-31T08:33:04.963 に答える
0

おそらく、SQLで型の不一致エラーが発生しています。2番目のSQLクエリは次のようになります。

$sql = "SELECT SIteID FROM bookings WHERE BSH_ID = '1' AND MarketID IN ($comma_separated)";
于 2010-03-31T08:35:10.237 に答える
0

他の人はすでに SQL クエリについて書いています。ただし、配列インデックスを正しく引用していることも確認してください。だから代わりに

$SIteID[] = $newArray[SIteID];

これを行う

$SIteID[] = $newArray['SIteID'];
于 2010-03-31T08:55:11.340 に答える