Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyciagniecie danych + count(*)
Forum PHP.pl > Forum > Bazy danych > MySQL
arczi
Witam,

  1. tabela user ( id, accepted )


chce wyciagnac z tabeli id wszystkich userow, ktorzy maja accepted=1 i przy okazji ich liczbe

probowalem paru kombinacji count(*) z selectem, group by ale raczej na sile

czy to proste zapytanie nie powinno dzialac?

  1. SELECT id, count(*)
  2. FROM user WHERE accepted=1


albo to:


  1. SELECT id, (SELECT count(*) FROM user WHERE accepted=1)
  2. FROM user WHERE accepted=1


prosze o pomoc/wskazowki smile.gif
zulus
Ja bym wykonał tylko z ID i pobrał z servera ile rekordów znalazł (w php np $result->affected_rows ) , w bardziej rozbudowanych przypadkach 2 zapytania :/
arczi
przypadek jest bardziej rozbudowany, ale chodzi mi o ta regule

czy w 1 zapytaniu cos takiego moge zrobic?
zulus
Tu masz o count http://dev.mysql.com/doc/refman/5.0/en/counting-rows.html

jeżeli to ma być tylko to co mówisz na na prawdę wystarczy
  1. <?php
  2. $fin= $mysqli->query($zapytanie);
  3. $fin->num_rows lub $mysqli->affected_rows
  4. ?>

można też:
  1. SELECT (SELECT COUNT(*) FROM `user` WHERE accepted=1) count, `id` FROM `user` WHERE accepted=1


ale nie wiem czy nie szybsze będą 2 zapytania
arczi
mysle, ze zdecydowanie szybciej bedzie kiedy do zapytania wloze count(*) zamiast robic dwa

Twoja druga sugestia to dokladnie to samo co napisalem w pierwszym poscie i sytuacja tu jest troche dziwna.

Otrzymuje komunikat Pokaż rekordy 0 - 6 (7 wszystkich, Wykonanie zapytania trwało 0.0591 sekund(y))

ale pod spodem wyswietla mi blad:
  1. SHOW KEYS FROM MySQL zwrócił komunikat: Dokumentacja
  2. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


MySQL 4.1.21

gdzie jest blad?
zulus
1. Przyjżyj się mojej wersji i swojej, jest kilka subtelnych różnic. Wygląda na to że ważna jest kolejność. Po za tym po nawiasie z podzapytaniem użyłem aliasu.

2. 2 zapytania są szybsze. Przy nieco większej liczbie wyników (27) zapytanie z podzapytaniem wykonywało się 3 razy dłużej od pierwszego, które miało tylko pobrać ID. Niestety PHPmyadmin nie epokazał jak długo trwało zapytanie z count (chyba było zbyt krótkie winksmiley.jpg )

W MySQL podzapytania bywają piekielnie wolne niestety.

BTW: Proponuję używać odwróconych nawiasów do nazw pól (`pole`), nazwy pól mogą też generować błędy.
arczi
Cytat(zulus @ 7.07.2007, 18:44:20 ) *
1. Przyjżyj się mojej wersji i swojej, jest kilka subtelnych różnic. Wygląda na to że ważna jest kolejność. Po za tym po nawiasie z podzapytaniem użyłem aliasu.

faktycznie, co do tego masz racje, ale probowalem tez zapytania ktore Ty podales i dupka biggrin.gif

kolejnosc wiec chyba nie ma znaczenia, ale co mnie dalej dziwi to fakt, ze zapytanie wykonuje sie "ale nie do końca", tzn.
Cytat
Otrzymuje komunikat Pokaż rekordy 0 - 6 (7 wszystkich, Wykonanie zapytania trwało 0.0591 sekund(y))

ale pod spodem wyswietla mi blad:
Błąd:
Zapytanie SQL:
SHOW KEYS FROM

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

ten blad i SHOW KEYS FROM nie wiem skad sie bierze, probowalem na innej tabeli w ten sposob - to samo

Cytat
2. 2 zapytania są szybsze...

Ja probowalem dla 400 userow - 0,1sek
A skoro juz weszedlem w temat to chcialbym sie przekonac jak jest szybciej smile.gif

Co moze powodowac blad?
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.