Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]liczba rekordów spełniających warunki
Forum PHP.pl > Forum > Przedszkole
f1xer
Witam mam np. zapytanie:

  1. SELECT * FROM users WHERE `name` LIKE "%pa%" LIMIT 0,30

i chciałbym pobrać te 30 rekordów jednocześnie pobierając informację o liczbie wszystkich rekordów (np. 65) które spełniają ten warunek. Czego powinienem użyć questionmark.gif
marcio
Nie rozumiem chcesz pobrac 30 rekordow spelniajacyh warunek where i zarazem liczbe lacznych rekordow w danej tabeli?
Meares
  1. $query = mysql_query('SELECT * FROM users WHERE `name` LIKE "%pa%" LIMIT 0, 30');
  2. $fetched = mysql_fetch_assoc($query);
  3. $num = mysql_num_rows($query);
  4.  
  5. /*
  6. * Jest pułapka!
  7. * $num zawiera tablicę, a nie jakby się mogło wydawać ilość rekordów, tę liczbę zawiera zerowy index tablicy ($num[0]).
  8. */
marcio
Cytat(Meares @ 23.10.2009, 23:37:26 ) *
[PHP] pobierz, plaintext
  1. $query = mysql_query('SELECT * FROM users WHERE `name` LIKE "%pa%" LIMIT 0, 30');
  2. $fetched = mysql_fetch_assoc($query);
  3. $num = mysql_num_rows($query);
  4.  
  5. /*
  6. * Jest pułapka!
  7. * $num zawiera tablicę, a nie jakby się mogło wydawać ilość rekordów, tę liczbę zawiera zerowy index tablicy ($num[0]).
  8. */
[PHP] pobierz, plaintext


Jesli chodzi o to co podal kolega wyzej to lepiej to robic w zapytaniu sql:


  1.  
  2. SELECT count(id) AS allusers, users.* FROM users WHERE `name` LIKE "%pa%" LIMIT 0,30
  3.  
f1xer
Cytat
Nie rozumiem chcesz pobrac 30 rekordow spelniajacyh warunek where i zarazem liczbe lacznych rekordow w danej tabeli?


Tak właśnie o to chodzi, tyle że liczbę wszystkich rekordów spełniających ten warunek.
Meares
No to dostałeś już dwie odpowiedzi. smile.gif Ta kolegi marcio, jest lepsza.
f1xer
mysql_num_rows($query); zwraca mi 30 czyli de facto, liczbę z limitu (warunek spełnia ponad 100 wpisów), a druga podpowiedz zwraca mi tylko jeden rekord :/ (chodzi o to zapytanie z count)
marcio
Zrob print_r() i pokaz mi ile ci zwraca jak nie to cos sie wykombinuje na sql az tak sie nie znam.

Jak nie to count(id) zamien na count(*)
Meares
Mi się widzi, że będziesz się musiał JOINami pobawiać.
f1xer
count(*) nic nie zmienia, print_r zwraca tablicę tylko z pierwszym wierszem ale kolumna allusers przechowuje dobrą wartość (czyli 124) tylko że nie ma pozostały 29 wierszy z danymi.

Z joinami powiadasz ? zapytanie jest bardziej rozbudowane niż w temacie generalnie łączy ponad 12 tabel i nie widzi mi się wykonywać go 2 razy przy tym drugi raz bez limit tylko po to żeby dostać całkowitą liczbę rekordów, ale jeżeli nie będzie innego wyjścia.......
marcio
Czekaj czekaj juz sie pogubilem to wkoncu co teraz brakuje?.

Jak nie to zaraz odpale mysql i ci zapodam 

Meares
  1. SELECT COUNT(`users`.*) AS 'allusers' AND `users`.* FROM `users` WHERE `name` LIKE "%pa%" LIMIT 0, 30


Ale nic nie obiecuje.
f1xer
zobacz ma być tak daje zapytanie z limit 30 czyli oczekuje tablicy 30 rekordów, ale chce też dostać informację o wszystkich rekordach. a jak robię count to owszem dostaje informację o tym ile jest tych rekordów ale nie dostaje tych 30 regordów.
marcio
Hmm jedyne co mi przychodzi do glowy to:

  1.  
  2. SELECT count(id) AS allusers, * FROM users WHERE `name` LIKE "%pa%" LIMIT 0,30
  3.  


  1.  
  2. SELECT count(id) AS allusers FROM users WHERE `name` LIKE "%pa%" UNION SELECT * FROM users WHERE `name` LIKE "%pa%" LIMIT 0,30
  3.  


mam nadzieje ze nie napisalem zadnej herezji biggrin.gif ale gram w cs'a

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.