PHP ve MySQL kullanarak bir CSV kapalı tabanlı adlarının bir listesini yazdırmak için en etkili yolu

4 Cevap php

Ben oyuncuların kimlikleri bir dizi var. Genellikle bir düzine daha sonra olması muhtemel yaklaşık 5 oyuncu, orada olacak:

$cplayers= array(1,2,5);

Ben bir liste olarak oyuncuların isimlerini görüntülemek istediğiniz.

$query = "SELECT username,id FROM users ORDER BY id";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
$playercounter =0;
while ( $row = mysql_fetch_array($result) ) {

  if ($row['id'] == $cplayers[$playercounter]) {
    echo "<li>".$row['username']."</li>";
    $playercounter++;
    }
  }

So I'm pretty sure this isn't the most efficient way I could do this. Would it be better to do individual queries? Also is there a good way to exit the while loop once $cplayers is done?

4 Cevap

Evet görünüşe cevabı, benim veritabanı normalleştirmek için daha ziyade yerine ikinci tablodaki w / bir dizi kullanarak daha iki katılmak için ayrı bir (üçüncü) tablo var.

Bu sadece sizin için kimlikleri oyuncular dönmesi gerekir:

$ids = implode($cplayers);
$query = "SELECT username,id FROM users WHERE id IN(" . $ids . ") ORDER BY id";

sadece bu bilgiye değiştirin:

$query = "SELECT username,id FROM users WHERE id IN (".implode(",",$cplayers).")ORDER BY id";

Bu aradığınız doğru oyuncuları dönecektir.

Ben bu yorumlama kulüpler nasıl dayanarak, ben örneğin, IN yan tümcesi MySQL kullanmak istiyorum

$id_list= array(1,2,5);
$sql= 'SELECT username FROM users WHERE id IN('. join(",",$id_list) .') ORDER BY id';
$result= mysql_query($sql) OR die(mysql_error());
while($row= mysql_fetch_assoc($result)) {
  echo "<li>{$row['username']}</li>";
}

Listede yalnızca id değerleri Bu hedefler, ne istiyorsun ki?