Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pytanie o zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
mysz0n
Pytanie o zapytanie:
Mam tabele instalacje, tabela instalacje ma następujące pola:
id_instalacji, id_klienta, data_instalacji, uwagi, id_serwisanta1, id_serwisanta2, status_instalacji.
Chce zrobić statystyki instalatorów, żeby mieć takie statystyki musze wrzucić do innego skryptu dane w stylu data=42*12*6*26*19&label=Michal*Mateusz*Tomasz*Rafal*Przemyslaw
na podstawie takiego ciągu – inny skrypt robi sobie wykres kołowy.
Wszystko zrobiłem sobie fajnie ale zapytanie patrzyło tylko na serwisanta1, serwisand 2 był pomijany, i teraz jak zrobić zapytaniem czy już w php takie coś żeby jeżeli na instalacje pojechal jeden serwisant to liczymy mu 1 punkt, jeżeli na instalacje pojechało 2 serwisantów – liczymy po 0,5 punkta. Jak najłatwiej i najszybciej to zrobić ?
kefirek
A na jakiej zasadzie odrózniasz czy pojechał jeden czy dwuch serwisantów ? Jak pojechał jeden to kolumna id_serwisanta1 jest podane id a kolumna id_serwisanta2 jest pusta ?

Jak tak to można to zrobić w ten desen
  1. SELECT *, SUM(IF(id_serwisanta2 > 0, '0,5','1')) AS pkt FROM serwis GROUP BY id_serwisanta1
mysz0n
jeżeli pojechał jeden to id_serwisanta1 = id tego serwisanta, a id_serwisanta2 = 0, Twoje zapytanie jest spoko, tylko nie doliczy punktów temu drugiemu instalatorowi, tzn zliczy wszystkie instalacje tego pierwszego - i to jest fajne, ale nie sumuje instalacji serwisanta 2.
da się to w jednym zapytaniu zrobic? (btw troche się bawie mysqlem a i takich if-ach w zapytaniu nie slyszalem - fajny bajer)
kefirek
Cytat(mysz0n @ 27.02.2009, 21:16:52 ) *
da się to w jednym zapytaniu zrobic? (btw troche się bawie mysqlem a i takich if-ach w zapytaniu nie slyszalem - fajny bajer)


Tak da się.

Tak powinno dzialac na 99% dobrze
Łączysz id użytkowników z kolumny id_serwisanta1 i id_serwisanta2 w jedną kolumnę ID za pomocą UNION ALL i przydzielasz pkt potem Dajesz warunek WHERE by nie liczyło ID = 0 a na końcu grupujesz po ID i sumujesz liczbę pkt dla każdego użytkownika
  1. SELECT *, SUM(pkt) AS suma
  2. FROM (
  3. (SELECT *, id_serwisanta1 AS id, IF(id_serwisanta2 > 0, '0.5','1') AS pkt
  4. FROM instalacje) UNION ALL
  5. (SELECT *, id_serwisanta2 AS id, IF(id_serwisanta2 = 0, '1','0.5') AS pkt
  6. FROM instalacje)
  7. ) AS razem
  8. WHERE id <> 0
  9. GROUP BY id
mysz0n
dzieki kefirek to co zrobiłeś po maleńkich modyfikacjach działa dokładnie tak jak chciałem. Powiedz mi tylko, czy takie zapytanie zalicza się już do tych trudniejszych? czy to nic takiego? bo myślałem, że całkiem całkiem ogarniam mysql-a ale na takie zapytanie bym nie wpadłsmile.gif jeszcze raz dzieki
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.