Değeri boş olduğunda bir değişkeni hariç

2 Cevap php

Aşağıdaki kod harika çalışıyor. Ben farklı kategoride kitap başlıklarını içeren bir MySQL veritabanı var. Aşağıdaki kodda, değişken "site" bir kitap başlığını temsil eder. Her kategori MySQL veritabanı farklı bir tablo ile temsil edilir.

Aşağıdaki kodu tüm kategorilerde toplam oyların (MySQL tablo) tarafından ilk 25 kitap başlıkları (site) yer alıyor. Ben boş kitap başlıkları (yani site ='') dışlamak için çalışıyorum. Bunu nasıl yapabilirim?

Ben bir kaç yerde WHERE site != '' takarak denedi ama ben bir hata mesajı alıyorum. Yani nerede WHERE site != '' ekleyebilirsiniz ben soruyorum sanırım?

Teşekkür peşin,

John

<?

mysql_connect("mysqlv10", "username", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());

$result = mysql_query("SHOW TABLES");
$tables = array();
while ($row = mysql_fetch_assoc($result)) {
    $tables[] = '`'.$row["Tables_in_bookfeather"].'`';

}

$subQuery = "SELECT site, votes_up FROM ".implode(" UNION ALL SELECT site, votes_up FROM ",$tables);
// Create one query that gets the data you need
$sqlStr = "SELECT site, sum(votes_up) sumVotesUp
        	FROM (
        	".$subQuery." ) subQuery
           GROUP BY site ORDER BY sum(votes_up) DESC LIMIT 25";
$result = mysql_query($sqlStr);

$arr = array(); 
echo "<table class=\"samples2\">";
while ($row = mysql_fetch_assoc($result)) { 
    echo '<tr>';
    echo '<td class="sitename2"><a href="booklookup3.php?entry='.urlencode($row["site"]).'&searching=yes&search=search">'.$row["site"].'</a></td>';
    echo '<td>'.$row["sumVotesUp"].'</td>';
    echo '</tr>';
} 

echo "</table>";



?>

2 Cevap

Bu sorguda koymak için muhtemelen en güvenli bulunuyor:

$subQueryParts = array();
foreach($tables as $table)
    $subQueryParts[] = "SELECT site, votes_up FROM $table WHERE LENGTH(site)";
$subQuery = implode(" UNION ALL ", $subQueryParts);

Eğer mümkünse, Bill Karwin tavsiyesi takip ve bir tablodaki tüm kitaplarınızı saklamak gerekir. Dinamik tablo isimleri aramak ve yönetmek çok zor, ve onlar iyi optimize yok.

Her kitap bir kategori için ayrı tablolar olmamalıdır. Ben bu tabloların herhangi çok büyük büyümek o kadar çok kitap var inanamıyorum. Eğer tabloyu bölerek elde olabilecek herhangi ölçeklenebilirlik faydaları bu UNION sorguları yapmak zorunda karmaşıklığı ile mahsup edilir.

İşte ben yapardım:

  • Bir tabloya tabloları birleştirin.
  • Bir Categories tablo ekleyin.
  • Bir çok-çok tablo ile kategoride kitap ilgilidir.

Sonra SQL sorgusu çok daha basit olur:

$sqlStr = "SELECT site, votes_up FROM Books
           WHERE site IS NOT NULL AND site <> ''
           ORDER BY votes_up DESC LIMIT 25";