Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sql] Problem ze złożonym zapytaniem
_olo_1984
post
Post #1





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


Witam

mam taki problem, chciałbym jednym zapytaniem wyciagnać dane z dwu tabel tak, aby kiedy podbiera mi dane kontrahentów, to potrzebuję też ilość zamówień każdego kontrahenta (z tym nie ma problemu) ale też ilość zamówień o statusie '0' i '1' osobno i razem czyli,
zakładajac ze jakis czlowiek zrobil w sklepie 10 zamowien, z czego 3 jeszcze nie zrealizowano (pole status =0 ) -> ma poakzać wynik 3/10

tabela kontrahenci:
id_kontrahenta | ...

tabela zamowienia:
id | id_kontrahenta | ... | status | aktywne

moje zapytanie:
  1. SELECT k.*, count(z.id) AS ile, (SELECT count(z.id) FROM `sklep_zamowienia` WHERE z.STATUS='0' AND z.id_kontrahenta=k.id_kontrahenta) AS zero FROM `kontrahenci` AS k LEFT JOIN `sklep_zamowienia` AS z ON(k.id_kontrahenta=z.id_kontrahenta) GROUP BY k.id_kontrahenta ORDER BY k.id_kontrahenta";


daje mi wynik taki, że jeżeli człowiek nic nie zamawial to ma 0/0 a jezeli ma chociaz jedno zamowienie to pokazuje max zamowien np 5/1 i tak przy kazdym kto mial jakiekolwiek zamowienia. Mam nadzieje ze nie zamieszalem. Prosze o pomoc
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Przenoszę na Mysql
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




http://nospor.pl/mysql-faq-n25.html#faq-3
gdzie pole1 to twoje pole status
  1. SELECT tabela1.pole1, count(tabela2.id) ilosc,
  2. count(IF(tabela2.pole1=0,1,NULL)) ilosc0,count(IF(tabela2.pole1=1,1,NULL)) ilosc1
  3. FROM tabela1 LEFT JOIN tabela2 ON tabela2.fk_tabela1=tabela1.id
  4. GROUP BY tabela1.id
Go to the top of the page
+Quote Post
joebezucha
post
Post #4





Grupa: Zarejestrowani
Postów: 43
Pomógł: 1
Dołączył: 23.05.2007
Skąd: Gliwice

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


Jeśli status moze przyjmowac tylko wartosci 0,1 to takie cos powinno zadzialac (nie sprawdzalem:)):

  1. SELECT k.*, COUNT(z.id) AS 'wszystkie', SUM(z.STATUS) AS 'zrealizowane', COUNT(z.id) - SUM(z.STATUS) AS 'niezrealizowane' FROM sklep_zamownienia z LEFT JOIN kontrahenci k ON(k.id_kontrahenta=z.id_kontrahenta) GROUP BY k.id_kontrahenta ORDER BY k.id_kontrahenta


Jesli status moze miec inne wartosci to zrob
  1. SUM(IF z.STATUS > 1, 1, 0) AS 'zrealizowane


Taka mam koncepcje ale nie bylo to sprawdzane nigdzie
Powodzenia
Go to the top of the page
+Quote Post
_olo_1984
post
Post #5





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


okej, dzięki za podpowiedź :-)


pozdrawiam
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: 8.10.2025 - 11:29