Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: while i SELECT COOUNT(*)
Forum PHP.pl > Forum > PHP
Apo
Witam
Chciałem policzyć ile jest komentarzy dla danego posta więc napisałem tak:

  1. <?php
  2. $users = $db -> query( 'SELECT id, data, tytul, wpis FROM newsy ORDER BY id DESC LIMIT 5');
  3.  
  4. while($array = $db -> fetch_row())
  5. {
  6. $ile = $db -> query( 'SELECT COUNT(*) FROM coments WHERE id='.$array['id'] );
  7.  
  8. $tytul = $filtr -> odczyt( $array['tytul'], 0 );
  9. $wpis = $filtr -> odczyt( $array['wpis']);
  10.  
  11.  
  12. $tmp_news -> blocks = array('tytul' => '<a class="linktitle" href="index.php?id=news&nr='.$array['id'].'">'.$tytul.'</a>', 'data' => date('d F Y - H i', $array['data']), 'tresc' => $wpis, 'komentarze' => $ile);
  13. $tmp_news -> parse();
  14. echo $tmp_news -> parsed;
  15. }
  16. ?>


Te obiekty $db nie mają tu znaczenia. Problem jest w tej linijce:
  1. <?php
  2. $ile = $db -> query( 'SELECT COUNT(*) FROM coments WHERE id='.$array['id'] );
  3. ?>

No i nie wiem jak to rozwiązać sad.gif
nospor
Cytat
Problem jest w tej linijce:
super, ale jaki ty masz problem? bo nic nie napisales jakie są objawy. a wrozek tu nie mamy
Apo
No pisze tak:
Something is wrong in your syntax obok '' w linii 1
Notice: Undefined index: tytul in index.php on line 109

Notice: Undefined index: wpis in index.php on line 110

Notice: Undefined index: id in index.php on line 113

Notice: Undefined index: data in index.php on line 113

te linie 110, 113 to:
  1. <?php
  2. $tytul = $filtr -> odczyt( $array['tytul'], 0 );
  3. $wpis = $filtr -> odczyt( $array['wpis']);
  4. ?>


No a gdy wyżuce to :
$ile = $db -> query( 'SELECT COUNT(*) FROM coments WHERE id='.$array['id'] );
To wszystko jest ok
tiraeth
Nadpisujesz uchwyt ostatniego polecenia do SQL smile.gif Tzn. nadpisujesz wartości z bazy gdy wykonujesz inne zapytanie nie kończąc poprzedniego...

  1. <?php
  2. $users = $db -> query( 'SELECT id, data, tytul, wpis FROM newsy ORDER BY id DESC LIMIT 5');
  3.  
  4. while($array = $db -> fetch_row())
  5. {
  6.  $news[] = $array;
  7. }
  8.  
  9. foreach($news as $array)
  10. {
  11. $ile = $db -> query( 'SELECT COUNT(*) FROM coments WHERE id='.$array['id'] );
  12.  
  13. $ile = $ile['COUNT (*)']; // <- zapytanie zwróciło ci tablice z elementem
  14.  
  15. $tytul = $filtr -> odczyt( $array['tytul'], 0 );
  16. $wpis = $filtr -> odczyt( $array['wpis']);
  17.  
  18.  
  19. $tmp_news -> blocks = array('tytul' => '<a class="linktitle" href="index.php?id=news&nr='.$array['id'].'">'.$tytul.'</a>', 'data' => date('d F Y - H i', $array['data']), 'tresc' => $wpis, 'komentarze' => $ile);
  20. $tmp_news -> parse();
  21. echo $tmp_news -> parsed;
  22. }
  23. ?>


Sprawdź
Apo
thx tiraeth. Twój sposób nie pomógł ale zrobiłem to tak:
$ile = mysql_query( 'SELECT COUNT(*) FROM coments WHERE id='.$array['id'] );
Co troche mi nie pasuje bo chciałem jednak kożystać w pełni z klasy obsługującej mysql ;/ Jak byście na coś wpadli to piszcie smile.gif
SongoQ
A po co takie kombinacje jak mozna uzyc grupowania

  1. SELECT COUNT(*) AS ilosc
  2. FROM coments GROUP BY pole
bigZbig
Cytat(SongoQ @ 2006-01-17 00:00:20)
A po co takie kombinacje jak mozna uzyc  grupowania

  1. SELECT COUNT(*) AS ilosc
  2.  
  3. FROM coments GROUP BY pole


Nie do końca bo kolega chce zliczyc liczbe komentarzy jedynie pieciu ostatnich newsow.

Cytat(Apo @ 2006-01-16 22:40:46)
  1. <?php
  2. $users = $db -> query( 'SELECT id, data, tytul, wpis FROM newsy ORDER BY id DESC LIMIT 5');
  3.  
  4. while($array = $db -> fetch_row())
  5. {
  6. }
  7. ?>


@Apo - z jakije abstrakcji baz danych korzystasz? Po co przypisujesz wynik zapytania do zmiennej $users skoro do niczego nie jest potrzebna? Czy zmienna $users nie zawiera wyniku w postaci tablicy asocjacyjnej, bo jesli tak to po co robic fetch_row()?
SongoQ
Cytat
Nie do końca bo kolega chce zliczyc liczbe komentarzy jedynie pieciu ostatnich newsow.


Mozna np tak.
  1. SELECT newsy.id, newsy.DATA, newsy.tytul, newsy.wpis t.ilosc
  2. FROM newsy LEFT JOIN (SELECT COUNT(*) AS ilosc, id_newsa
  3. FROM coments GROUP BY id_newsa) t ON (newsy.id = t.id_newsa) ORDER BY newsy.id DESC LIMIT 5
bigZbig
Ja sie staram unikac podzapytan i zrobilbym to raczej tak (nie sprawdzalem czy dziala):

  1. <?php
  2. $query = 'SELECT id_news, data, tytul, wpis FROM newsy ORDER BY id_news DESC LIMIT 5';
  3. $result = mysql_query($query);
  4.  
  5. while($row = mysql_fetch_array($result, MYSQL_ASSOC) {
  6. $aIds[] = $row['id'];
  7. }
  8.  
  9. $query ='SELECT COUNT(*) as ilosc 
  10.  FROM coments 
  11.  WHERE id_news IN ('.implode(",", $aIds).')
  12.  GROUP BY id_news';
  13. ?> 
SongoQ
@bigZbig Twoja werjsa jest nieoptymalna poniewaz robisz 16 polaczen do bazy i 16 zapytan, przez co tracisz na czasie i niepotrzenie wysylasz polaczenia.
bigZbig
Cytat(SongoQ @ 2006-01-17 11:26:09)
@bigZbig Twoja werjsa jest nieoptymalna poniewaz robisz 16 polaczen do bazy i 16 zapytan, przez co tracisz na czasie i niepotrzenie wysylasz polaczenia.

Jesteś pewien? ;-) Sprawdz jeszcze raz.
SongoQ
Sorki zle popatrzylem, ale to i tak nie zmienia faktu bo masz 2 zapytania, na dodatek gdzie masz stosotwanie IN, a jak wiadomo IN nie jest najszybszy dla bazy danych, wiec dalej sie trzymam z werjsa z 1 zapytaniem.
Maly przykladzis masz LIMIT 100 i IN wtedy bedzie dla 100 wartosci, troche to bedzie straszne dla bazy. Nie wierzysz - sprawdz.

A za tamta pomyłke przepraszam, popatrzylem nie na tego posta.
bigZbig
SongoQ - > zgadzam sie z Toba calkowicie ze moje rozwiazanie jest mniej wydajne, jednak nie kazda baza danych obsluguje podzapytania i wtedy zostaje ci rekurencja albo cos podobnego do mojego rozwiazania
SongoQ
No oczywiscie, rowniez sie zgadzam robi sie tak na jakie warunki pozwala hosting.
Apo
Cytat
Po co przypisujesz wynik zapytania do zmiennej $users skoro do niczego nie jest potrzebna?

Hmm właśnie tez nie wiem po co była ta zmienna tongue.gif
Przeanalizuje sobie wasze przykłady bo przygode z mysql dopiero zaczełem smile.gif
SongoQ
Jesli zaczynasz SQL to przeanalizuj sobie moj przyklad i przyklad @bigZbig
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.