Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MYSQL COUNT, Zliczanie wyświetlonych wierszy
przem1969
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.08.2013

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


Pewnie banał . Jak dopisać do tego COUNT(*)
  1. $query ='SELECT id,title, shortstory, story , i . * FROM tabela s JOIN tabela2 i ON s.id = i.uid
  2. WHERE story LIKE "%' . $szukanaFraza . '%"
  3. ORDER BY id DESC'


Jak dopisuje do tego zapytania Count(*) to wyświetla mi tylko jeden wynik choć istnieje więcej a chciałbym żeby zliczyć ilość wyświetlonych wyników. Np. po wpisaniu frazy w szukajke zlicza mi ,że wyników znalazł np. 20.
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Będziesz musiał wykonać drugie zapytanie odpowiedzialne wyłącznie za zliczanie ilości pasujących wyników.
Go to the top of the page
+Quote Post
przem1969
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.08.2013

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


Zrobiłem drugie zapytanie jak poradziłeś ale już to wczesniej próbowałem . Niby w bazie liczba Count(*) 949 co jest błędem ale wyświetla mi się jedeny wynik tylko. No dobrze wyswietlanie być może php źle napisany ale wyniki sa błędne więc gdzies robie błąd i nie wiem gdzie?
  1.  
  2. SELECT COUNT( * ) , i. *
  3. FROM tabelka s
  4. JOIN tabelka1 i ON s.id = i.uid
  5. WHERE file
  6. ORDER BY uid DESC
  7.  
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Niby w bazie liczba Count(*) 949 co jest błędem ale wyświetla mi się jedeny wynik tylko.
Dlaczego uważasz, że jest błędem?

Robisz dwa zapytania z takimi samymi klauzurami WHERE i JOIN ewentualnie ignorując sortowanie:
  1. SELECT COUNT(*) FROM tabela s JOIN tabela2 i ON s.id = i.uid WHERE story LIKE :fraza;
  2. SELECT id,title, shortstory, story , i . * FROM tabela s JOIN tabela2 i ON s.id = i.uid WHERE story LIKE :fraza ORDER BY id DESC;
Pamiętaj tylko, że jeżeli wykonujesz JOIN-y z relacją do-wielu zwróconych może być więcej rekordów niż "obiektów" w bazie. Wtedy powinieneś zliczać unikalne wystąpienia jakiejś kolumny - tutaj najprawdopodobniej s.id.

Ten post edytował Crozin 26.05.2015, 09:38:12
Go to the top of the page
+Quote Post
Turson
post
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Za pomocą FOUND_ROWS można w jednym zapytaniu pobrać i zliczyć
https://dev.mysql.com/doc/refman/5.0/en/inf...tion_found-rows
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Warto jedynie mieć na uwadze: https://www.percona.com/blog/2007/08/28/to-...alc_found_rows/ - chociaż w sumie może coś już się zmieniło od tego czasu.
Go to the top of the page
+Quote Post
Turson
post
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Przy zapytaniu gdzie miałem 10 JOINów to było szybsze od 2x wykonywanego zapytania
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@Turson: Tutaj jest jedno wielkie "to zależy" jeżeli chodzi o wydajność SELECT SQL_CALC_FOUND_ROWS vs. SELECT + SELECT COUNT.
Go to the top of the page
+Quote Post
Turson
post
Post #9





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Najprościej samemu sprawdzić co w tym wypadku lepiej się sprawdza.
Ba, jeżeli autor to zapytania wykonuje powiedzmy przez PHP to możemy tez policzyc count()
Go to the top of the page
+Quote Post
przem1969
post
Post #10





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.08.2013

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


Nie wiem dlaczego , za kazdym razem dostaje 0 wyników. Czy robie to dwoma zapytaniami czyli w drugim COUNT(*) Czy jeesli korzystam z SELECT SQL_NO_CACHE dostaje zero wyników . A jak korzystam ze swojego


  1.  
  2. SELECT id, title, shortstory, story, i. *
  3. FROM tabela s
  4. JOIN tabela2 i ON s.id = i.uid
  5. WHERE story LIKE "%' . $szukanaFraza . '%"
  6. ORDER BY id DESC
  7.  


wszystko jest Ok .

Czy to w phpie jest gdzieś błąd ? Jesli w bazie wpisze jakas fraze i doam dwa zapynia
  1. SELECT COUNT(*) FROM tabela s JOIN tabela2 i ON s.id = i.uid WHERE story LIKE :fraza;
  2. SELECT id,title, shortstory, story , i . * FROM tabela s JOIN tabela2 i ON s.id = i.uid WHERE story LIKE :fraza ORDER BY id DESC;


dostaje zero wynikow .



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





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeżeli dostajesz zero wyników to... pewnie żaden rekord nie spełnia kryteriów. Pokaż dokładny kod, pokaż dokładne zapytania.
Go to the top of the page
+Quote Post
przem1969
post
Post #12





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.08.2013

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


Jakiś głupi chyba jestem . Nie umiem tego zrobić . Nieważne są nazwy tabel więc ich nie zmieniam.

  1. $query ='SELECT id,title, shortstory, story ,viewcount, i . * FROM news30_story s JOIN news30_images i ON s.id = i.uid
  2. WHERE story LIKE "%' . $szukanaFraza . '%"
  3. ORDER BY id DESC ';
  4. 'SELECT COUNT(*) id,title, shortstory, story ,viewcount, i . * FROM news30_story s JOIN news30_images i ON s.id = i.uid
  5. WHERE story LIKE "%' . $szukanaFraza . '%"
  6. ORDER BY id DESC ';
  7. $result = mysql_query($query, $base) or die(mysql_error());
  8. $num=mysql_num_rows($result);
  9. $result=mysql_query($query);
  10.  
  11. if ($result && mysql_num_rows($result) != 0) {
  12. $i=0;
  13. while ($i < $num) {
  14.  
  15. $id=mysql_result($result,$i,"id");
  16. $file=mysql_result($result,$i,"file");
  17. $viewcount=mysql_result($result,$i,"viewcount");
  18. $title_substring=mysql_result($result,$i,"title");
  19. $story=mysql_result($result,$i,"story");
  20. $title_substring = mb_substr($title_substring,0, 1000, 'UTF-8');
  21. $total_count = mysql_num_rows($query);
  22. mysql_close($base);


potem echo "" i wiadomo.

Poprosze o pomoc ? Ponieważ nie rozumiem. Chciałbym żeby wystapiła ilośc wyników znalezionych jak w pierwszym zapytniu to natepuje i jest ok.
Go to the top of the page
+Quote Post
Crozin
post
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Nie powinieneś używać mysql_*() tylko PDO, ew. MySQLi.
2. Przecież tekstu tego drugiego zapytania nawet do żadnej zmiennej nie przypisałeś o jego wykonaniu nie wspominając.
3. Dlaczego przy zapytaniu z COUNT masz jeszcze jakieś inne kolumny?
4. Po co 2 razy wykonujesz to samo zapytanie (linia #7 i #9)?
Go to the top of the page
+Quote Post
robertpiaty
post
Post #14





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

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


Załóżmy że chcesz policzyć rekordy w tabeli news30_story. Aby uniknąć zdublowania rekordów spowodowanych np joinem możesz zrobić coś takiego:
  1. SELECT COUNT(DISTINCT s.id) AS count FROM news30_story s JOIN news30_images i ON s.id = i.uid
  2. WHERE story LIKE "%' . $szukanaFraza . '%"


Swoją drogą jeżeli chcesz policzyć rekordy z tabeli news30_story a kolumna story jest właśnie w tej tabeli to nie ma sensu tutaj robić tego joina. Tak przy okazji - jeśli nie masz to ustaw index na kolumnie story.

Ten post edytował robertpiaty 26.05.2015, 13:34:04


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





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.08.2013

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


  1. $id_count=mysql_query('SELECT COUNT(DISTINCT s.id) AS count FROM news30_story s JOIN news30_images i ON s.id = i.uid
  2. WHERE story LIKE "%' . $szukanaFraza . '%" ');
  3.  
  4. $total_count = mysql_fetch_row($id_count);

Nie rozumiem tego . Czy robię coś źle ?

Ten post edytował przem1969 26.05.2015, 14:05:14
Go to the top of the page
+Quote Post
Crozin
post
Post #16





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Nie wykonujesz żadnego zapytania (mysql_query).
Go to the top of the page
+Quote Post
przem1969
post
Post #17





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.08.2013

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


Wpisze w szukajaca fraze np cos ? Tez dostaje wynik zero
Go to the top of the page
+Quote Post
Crozin
post
Post #18





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Wyświetl sobie finalne zapytanie (echo $query) - albo masz w nim coś zrypanego i przez brak obsługi błędów w swoim kodzie nie widzisz tego albo po prostu nie ma rekordów spełniających te kryteria.
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: 22.08.2025 - 08:42