Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyciagniecie danych + count(*)
arczi
post 6.07.2007, 22:37:35
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Rzeszów

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


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
Go to the top of the page
+Quote Post
zulus
post 6.07.2007, 23:10:00
Post #2





Grupa: Zarejestrowani
Postów: 225
Pomógł: 18
Dołączył: 30.06.2003
Skąd: Wrocław

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


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 :/


--------------------
Go to the top of the page
+Quote Post
arczi
post 6.07.2007, 23:13:16
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Rzeszów

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


przypadek jest bardziej rozbudowany, ale chodzi mi o ta regule

czy w 1 zapytaniu cos takiego moge zrobic?
Go to the top of the page
+Quote Post
zulus
post 6.07.2007, 23:28:08
Post #4





Grupa: Zarejestrowani
Postów: 225
Pomógł: 18
Dołączył: 30.06.2003
Skąd: Wrocław

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


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


--------------------
Go to the top of the page
+Quote Post
arczi
post 7.07.2007, 14:26:43
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Rzeszów

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


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?
Go to the top of the page
+Quote Post
zulus
post 7.07.2007, 17:44:20
Post #6





Grupa: Zarejestrowani
Postów: 225
Pomógł: 18
Dołączył: 30.06.2003
Skąd: Wrocław

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


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.


--------------------
Go to the top of the page
+Quote Post
arczi
post 8.07.2007, 00:11:09
Post #7





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Rzeszów

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


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?
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 07:50