Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> while i SELECT COOUNT(*)
Apo
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Problem jest w tej linijce:
super, ale jaki ty masz problem? bo nic nie napisales jakie są objawy. a wrozek tu nie mamy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Apo
post
Post #3





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
tiraeth
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ź
Go to the top of the page
+Quote Post
Apo
post
Post #5





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


A po co takie kombinacje jak mozna uzyc grupowania

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


--------------------
Go to the top of the page
+Quote Post
bigZbig
post
Post #7





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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()?


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
SongoQ
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
bigZbig
post
Post #9





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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. ?> 


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
SongoQ
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


@bigZbig Twoja werjsa jest nieoptymalna poniewaz robisz 16 polaczen do bazy i 16 zapytan, przez co tracisz na czasie i niepotrzenie wysylasz polaczenia.


--------------------
Go to the top of the page
+Quote Post
bigZbig
post
Post #11





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
SongoQ
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
bigZbig
post
Post #13





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
SongoQ
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


No oczywiscie, rowniez sie zgadzam robi sie tak na jakie warunki pozwala hosting.


--------------------
Go to the top of the page
+Quote Post
Apo
post
Post #15





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
SongoQ
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Jesli zaczynasz SQL to przeanalizuj sobie moj przyklad i przyklad @bigZbig


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 16:00