Array içine Yeri Sorgulama Sonuçlar daha sonra çözülür ve Blur?

5 Cevap php

Temelde ben Table2 bir site id bulmak için bu kimliği kullanmak, tablo1 bir kimliği çekin, daha sonra, bir dizi sitesi kimlikleri kullanın çökmek ve site adları sorgu Tablo3 gerekir. Daha sonra bir süre döngü kullanılan doğru ilk ben bir hata var diziyi implode olamaz.

While döngüsü ile çıkış sadece diyor: Dizi

$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);

?>

Temelde ne yapmam gerekiyor ben çökmek ve Çizelge 3'te adları çekmek için 3 sorguda kullanabileceğiniz bir dizi sorgu sonuçlarını taşımak doğru değildir.

5 Cevap

Bu ne demek olduğunu eğer şaşıracaksınız:

... AND MarketID = '$comma_separated'

Bu bir virgülle ayrılmış bir liste olarak MarketID veritabanında saklanır söylüyor. Muhtemelen bu demek:

... AND MarketID IN ($comma_separated)

Ayrıca, birden çok sorguları yapmak gerekmez, bir JOIN kullanabilirsiniz:

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'

Aynı şekilde üç yerine tek sorguda nihai sonuç almak yerine, bu ile Tablo3 katılabilirsiniz.

Bu mysql sorguda bunu yapmak mümkün değil mi?

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')

Yoksa yolu kullanabilirsiniz, bu durumda size sadece mysql için aynı IN deyimini kullanmak gerekir.

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

Muhtemelen SQL bir tür uyumsuzluğu hatası alıyoruz. Sizin ikinci sql sorgusu olmalıdır:

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

Diğerleri zaten SQL sorgusu hakkında yazdı. Ama aynı zamanda doğru indekslediği teklif emin olun. Yani yerine

$SIteID[] = $newArray[SIteID];

Bunu yapmak

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