Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MYSQL COUNT
Forum PHP.pl > Forum > Bazy danych > MySQL
przem1969
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.
Crozin
Będziesz musiał wykonać drugie zapytanie odpowiedzialne wyłącznie za zliczanie ilości pasujących wyników.
przem1969
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.  
Crozin
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.
Turson
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
Crozin
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.
Turson
Przy zapytaniu gdzie miałem 10 JOINów to było szybsze od 2x wykonywanego zapytania
Crozin
@Turson: Tutaj jest jedno wielkie "to zależy" jeżeli chodzi o wydajność SELECT SQL_CALC_FOUND_ROWS vs. SELECT + SELECT COUNT.
Turson
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()
przem1969
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 .



Crozin
Jeżeli dostajesz zero wyników to... pewnie żaden rekord nie spełnia kryteriów. Pokaż dokładny kod, pokaż dokładne zapytania.
przem1969
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.
Crozin
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)?
robertpiaty
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.
przem1969
  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 ?
Crozin
Nie wykonujesz żadnego zapytania (mysql_query).
przem1969
Wpisze w szukajaca fraze np cos ? Tez dostaje wynik zero
Crozin
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.
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.