Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> trudne zapytanie z count
pbanasiak
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 3.04.2004

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


potrzebuje wyciągnąć w jednym zapytaniu z tabeli x te rekordy, gdzie x.ilosc > 1+ilość rekordów w tabeli y, gdzie y.username=x.username
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
popbart
post
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

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


Nikt tu nie jest jasnowidzem i nie wie jaka jest struktura bazy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
crash
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


  1. SELECT x.*
  2. FROM x, y WHERE x.ilosc > 1 + count(DISTINCT y.rekord) AND x.username = y.username

Może zadziała (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
pbanasiak
post
Post #4





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 3.04.2004

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


crashu

MySQL zwrócił komunikat:

#1111 - Invalid use of group function



popbart - struktura nie ma znaczenia, ale jak chcesz to podaję
to jest tabela x
Kod
id  bigint(20)   Nie    auto_increment              
   url  text   Tak  NULL                
   username  varchar(20)   Tak  NULL                
   active  int(1)   Tak  NULL                
   approved  int(1)   Tak  NULL                
   odslon  bigint(20)   Tak  NULL                
   time  bigint(20)   Tak  NULL                
   admin  int(1)   Nie  0          

a to y
Kod
time  bigint(20)   Tak  NULL                
   username  varchar(20)
i jest jeszcze tabela z:
Kod
username  varchar(20)   Tak  NULL                
credit  decimal(20,1)   Tak  NULL


aktualnie zapytanie wyglada tak:

  1. SELECT `x`.`id`, `x`.`userid`, `x`.`url`, `z`.`credit`
  2. FROM `x`, `z` WHERE `x`.`userid` = `z`.`userid` && `x`.`admin` = 0 && `x`.`approved` = 1 && `x`.`active` = 1 && `z`.`credit` >= 1 && `x`.`userid` != $_SESSION[userid] ORDER BY `x`.`time`

i potem jest jeszcze
  1. SELECT count(*)
  2. FROM `y` WHERE `userid` = $rezul[userid]

i jeśli
  1. <?php
  2. if($rezul[&#092;"credit\"]-$ile < 1) break; //ile to ta wartość z drugiego zapytania
  3. ?>

i chodzi o to aby to połączyć w jedno
Go to the top of the page
+Quote Post
SongoQ
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


  1. COUNT(*) AS iloscrekordow, x.username, x.ilosc
  2. FROM x, y
  3. WHERE x.username = y.username
  4. GROUP BY x.username, x.ilosc
  5. HAVING x.ilosc > 1 + iloscrekordow
Go to the top of the page
+Quote Post
pbanasiak
post
Post #6





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 3.04.2004

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


a mógłby ktoś pomóc dodać to do tego
  1. SELECT `x`.`id`, `x`.`userid`, `x`.`url`, `z`.`credit`
  2. FROM `x`, `z` WHERE `x`.`userid` = `z`.`userid` && `x`.`admin` = 0 && `x`.`approved` = 1 && `x`.`active` = 1 && `z`.`credit` >= 1 && `x`.`userid` != $_SESSION[userid] ORDER BY `x`.`time`

aby tam gdzie jest `z`.`credit` >= 1 była dodana ilość rekrordów z y, gdzie y.userid=x.userid
Go to the top of the page
+Quote Post
SongoQ
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Co do zapisu SQLa to zamiast AND pisanie && jest niepoprawnym zapisem, jest to glupi wymysl MySQLa niezgodny z innymi bazami danych. Polecam stosowanie AND, OR zamast &&, ||

A co do zapytania to CI juz pisalem uzyj Count i having.

Powyzej masz przyklad, tylko gdzies mi slowo select wcialo.
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: 22.08.2025 - 21:48