Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Uciekające wyniki w zapytaniu
Forum PHP.pl > Forum > Przedszkole
pzcjnr
Witam,
Mam problem z wyświetlaniem wyniku zapytania do bazy danych.

Mój kod:

  1. $adres2="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
  2. $zap = $vbulletin->db->query_read(" SELECT kw
  3. FROM google_searches
  4. WHERE url = '$adres2'
  5. ORDER BY hits DESC
  6. LIMIT 20 ");
  7.  
  8. $liczba = mysql_num_rows($zap);
  9. $spr = mysql_fetch_row($zap);
  10. echo $liczba;
  11. echo $spr[0];


Zapytanie działa. Problem w tym, że w bazie jest rekordów 65 spełniających kryteria. Tak mi również pokazuje mysql_num_rows.
jednak echo $spr[0] zwraca mi już tylko jeden wynik. Ten który ma największą liczbę w kolumnie hits więc tutaj jest ok. Tylko czemu zwraca mi 1 wynik a nie 20 tak jak jest w klauzuli LIMIT ?

Dodam, że w tabeli google_searches mam kolumny kw , url, hits. Chce wyświetlić zawartość pola kw z rekordów w których jest określona wartość w polu url.
Zapytanie które mam robi to tylko, że wyświetla mi tylko 1 rekord, a nie 20. Z usuniętym LIMIT jest to samo.
Blame
Bo $spr jest tablicą i ty wyświetlasz tylko jej zerowy indeks. Zainteresuj się pętlą while, ew. http://webmade.org/kursy-online/mysq_fetch...-kurs-mysql.php winksmiley.jpg
pzcjnr
Kombinowałem z tym ale nie udało mi się. Nie wyświetla mi nic. Problem dodatkowy mam, że wynik pętli while musi być zapisany do zwykłej zmiennej. (bo tylko taką zmienną mogę dodać do szablonu strony, w szablonie nie może być php)
Mój skrypt w tej chwili wygląda tak:

  1. $adres2="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
  2. $zap = $vbulletin->db->query_read(" SELECT kw
  3. FROM google_searches
  4. WHERE url = '$adres2'
  5. ORDER BY hits DESC
  6. LIMIT 20 ");
  7.  
  8. $liczba = mysql_num_rows($zap);
  9. $idzap = mysql_query($zap);
  10. while ($wiersz = mysql_fetch_row($idzap)) {
  11. $tematys = $tematys.$wiersz[0];
  12. }
  13.  


W szablonie mam umieszczoną zmienną $tematys i do tej zmiennej powinien być przypisany wynik pętli.

Próbowałem też tak:

  1. $adres2="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
  2. $zap = $vbulletin->db->query_read(" SELECT kw
  3. FROM google_searches
  4. WHERE url = '$adres2'
  5. ORDER BY hits DESC
  6. LIMIT 20 ");
  7.  
  8. $liczba = mysql_num_rows($zap);
  9. $idzap = mysql_query($zap);
  10. $tematys = while ($wiersz = mysql_fetch_row($idzap)) {
  11. echo $wiersz[0];
  12. }
  13.  
  14.  


Jednak ani jedno ani drugie nie działa. Gdzie popełniam błąd ?
bleblok
O ile dobrze Cię zrozumiałem, to chcesz mieć w $tematys tablicę wartości z kolumny `kw` w bazie. Następnie tego $tematys używasz dalej w jakimś template. Jeśli tak, to:
  1. $adres2="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
  2. $zap = $vbulletin->db->query_read(" SELECT kw
  3. FROM google_searches
  4. WHERE url = '$adres2'
  5. ORDER BY hits DESC
  6. LIMIT 20 ");
  7.  
  8. $liczba = mysql_num_rows($zap);
  9. $idzap = mysql_query($zap);
  10. $tematys = array();
  11. while ($wiersz = mysql_fetch_row($idzap)) {
  12. $tematys[] = $wiersz[0];
  13. }
  14. echo 'Wpisalem '.$liczba.' tematow do zmiennej'; // test


pzcjnr
Cytat(bleblok @ 11.08.2010, 17:33:05 ) *
O ile dobrze Cię zrozumiałem, to chcesz mieć w $tematys tablicę wartości z kolumny `kw` w bazie. Następnie tego $tematys używasz dalej w jakimś template. Jeśli tak, to:


hmn, w tym momencie w templatce wyświetla mi słówko Array.
Precyzując, tak, właśnie o to chodzi. Zapytanie zwraca mi x rekordów i chce w $tematys mieć tablice tych rekordów wyświetlonych jeden po drugim po przecinku. Wartości z kolumny `kw`.
bleblok
Jeśli chcesz je mieć po przecinku, to
  1. $adres2="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
  2. $zap = $vbulletin->db->query_read(" SELECT kw
  3. FROM google_searches
  4. WHERE url = '$adres2'
  5. ORDER BY hits DESC
  6. LIMIT 20 ");
  7.  
  8. $liczba = mysql_num_rows($zap);
  9. $idzap = mysql_query($zap);
  10. $tematys = '';
  11. while ($wiersz = mysql_fetch_row($idzap)) {
  12. $tematys .= $wiersz[0].',';
  13. }
  14. echo 'Wpisalem '.$liczba.' tematow do zmiennej'; // test


Można też:

  1. $tematys = array();
  2. while ($wiersz = mysql_fetch_row($idzap)) {
  3. $tematys = $wiersz[0];
  4. }
  5. $tematys = implode(',',$tematys); //
  6. echo 'Wpisalem '.$liczba.' tematow do zmiennej'; // test


Nie wyświetli Ci wtedy ostatniego przecinka
pzcjnr
Niestety to nie działa.
Przy użyciu pierwszego kodu nic nie wyświetla w templatce.
Przy użyciu pętli while z drugiego przykładu też nic nie wyświetla w templatce. Jedynie gdy usunę linijke z implode to wyświetla mi Array.

No i teraz pytanie z której strony się do tego dobrać, żeby to wyświetlało dobrze?
glh
  1. //instrukcje zwiazane z polaczeniem z baza pominiete celowo.
  2. //tak samo jak kwestie obslugi bledow
  3.  
  4. $q="SELECT kw FROM gs WHERE url = '$adres2' ORDER BY hits DESC LIMIT 20";
  5. $res=mysql_query($q,$sql);
  6. $tematys=array();
  7. while ($rek=mysql_fetch_row($res)) $tematys[]=$rek[0];
  8.  
  9. $ostatni=count($tematys);
  10. $l=0;
  11.  
  12. foreach ($tematys as $temat)
  13. {
  14. $l++;
  15. echo $temat;
  16. if ($l<$ostatni) echo ",";
  17. }


Musi działać.
Ps. Kod od $ostatni)=count($tematys) odpowiada za wypisanie wartości po przecinku - z uwzględnieniem brakującego przecinka po ostatnim elemencie tablicy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.