Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Jedno zapytanie czy dwa?
sadistic_son
post
Post #1





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Siema. Chcę wyświetlić z bazy wszystkie rekordy, wiadomo - w while, oraz jedną wartość - ilość rekordów gdzie paid=1.
Da się tak zrobić w jednym zapytaniu? Chyba nie, co?
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Jest taki modyfikator:
  1. SELECT SQL_CALC_FOUND_ROWS * FROM tablea WHERE ...;

ale jest on "depracated". O ile pamiętam nie zwracał chyba dokładnych wyników (może się mylę).

Skoro jednak pobierasz wszystkie rekordy, to przecież w PHP możesz obliczyć ile ich jest. Chyba, że robisz stronicowanie.
Go to the top of the page
+Quote Post
Salvation
post
Post #3





Grupa: Zarejestrowani
Postów: 405
Pomógł: 73
Dołączył: 15.07.2014

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


Możesz zrobić zwykły COUNT(...)
I tak, lepiej to dociągnąć dwoma osobnymi zapytaniami.

Ten post edytował Salvation 14.04.2025, 13:43:21
Go to the top of the page
+Quote Post
Malinaa
post
Post #4





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

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


W takiej sytuacji - gdy chcesz pobrać wszystkie rekordy z tabeli i policzyć tylko te, gdzie paid = 1, to da się to zrobić w jednym zapytaniu, bez SQL_CALC_FOUND_ROWS i bez osobnych zapytań, przy użyciu agregatu okna (window function).

  1. SELECT
  2. t.*,
  3. COUNT(CASE WHEN t.paid = 1 THEN 1 END) OVER () AS paid_count
  4. FROM
  5. tablea t;


Można w jednym zapytaniu, najlepiej z COUNT(...) OVER ().
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 17.09.2025 - 15:33