Mysql atma sorgu hatası henüz sadece ince neden sorgusu bitirme?

2 Cevap php

Ben alıyorum

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result 
resource in *filename* on line 81

Bir grafik oluşturmak için bir sorgu çalışırken. Sorgu mysql db veri alır ve grafik oluşturmak için kullanır.

Genellikle, bu hatayı alıyorum ve koda gidin ve ben bunu düzeltmek, mahvettin nerede olduğunu bulmak ve hareket. Bu sorun hakkında zor kısmı sorgu aslında çalışıyor ve grafik inşa ve doğru görüntülenir ediliyor olmasıdır. Neden sunucu (xampp localhost) sadece iyi kaynak kullanmak zaman sorgu sonucu kötü olduğunu bana anlatıyor?

İşte tam sorgu:

$chart=array();
    $roll=array();
    //select used terms
    $rosh=mysql_query("select distinct term from search_terms");

    while($roshrow=mysql_fetch_assoc($rosh)){
    	extract($roshrow);
    		$roll[]=$term;
    	}

    	//select term_number for each term
    	foreach($roll as $sterm){
    		$termarray=array();
                  **//following is line 81**
    		$bashq="select term_number from search_terms where term ='$sterm'";
    		$bash=mysql_query($bashq);
    		while($brow=mysql_fetch_assoc($bash)){
    			extract($brow);
    			//put results into array to sum
    			$termarray[]=$term_number;
    		}
    		$termsum=array_sum($termarray);

    	//put term=>number array for chart script
    		$chart[$sterm]=$termsum;

    	}
    	//sort array so high numbers at beginning
    	arsort($chart);

    	//slice top 10 terms
    	$chart=array_slice($chart,0,10);

2 Cevap

Bunu yapın:

$rosh=mysql_query("select distinct term from search_terms")
  or die("Error with query: " . mysql_error());

ve bu:

$bash=mysql_query($bashq)
  or die("Error with query: " . mysql_error();

Başarısız olduğunda o size söyleyecektir. Sen mysql_query "false" döndü ve geçerli bir sonuç kaynak değildir çünkü bu mesajı alıyorsanız, ama doğru.

Bir döngü, terimlerin birinin içinde sorgulama işleme olmadığından (muhtemelen çünkü SEARCH_TERMS belirli çevirmek için satır eksik. Garip hangi, aynı tablo sorgularken konum beri.

Bir Uyarı değil, ölümcül bir hata olduğundan Ancak, yine de devam edecektir.

Her iki şekilde de, bu veri çekerek yanlış bir yol gibi görünüyor, muhtemelen terimlerin toplamını almak için doğrudan SQL server, GROUP BY ve SUM () bir sorguda, yeterli sıralama (ORDER BY) ile taht yapabilirsiniz.

Eğer SQL okumak yerine olmalıdır :)


SELECT term, SUM(term_number) as term_sum
FROM search_terms 
GROUP BY terms 
ORDER BY term_sum DESC
LIMIT 10

10 kayıtla sınırlıdır aswell, sonra sadece hashtable kopyalayın ve zaten tasnif edilmelidir.