Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obrobka zapytania SQL
KR2615
post 29.06.2012, 08:19:13
Post #1





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

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


Witam.
Jest ranek a mnie już brakuje świeżych pomysłów. Mam skrypt, którego zadaniem jest pokazywac płatności klientów za dany rok:

  1. <?
  2. $city="55-010";
  3. $rok = date('Y', time());
  4. echo '<table border="1" cellspacing="1" cellpadding="1" rules="all">';
  5. echo '<tr align="center" bgcolor="#555555"><td><b>Imi. i nazwisko</b></td> <td>stycze.</td> <td>luty</td> <td>marzec</td> <td>kwiecie.</td> <td>maj</td> <td>czerwiec</td></tr>';
  6. $query = mysql_query("SELECT * FROM klienci WHERE city='$city' ORDER BY name ASC");
  7. while ($klient = mysql_fetch_array($query)) {
  8. $query2 = mysql_query("SELECT * FROM platnosci WHERE kid='$klient[id]' AND month LIKE '%$rok-%' ORDER BY month ASC");
  9. $m=1;
  10. print('<tr><td>' .$klient[name]. '</td>');
  11. while($row = mysql_fetch_row($query2)) {
  12. if(!empty($row[$m])) { echo '<td bgcolor= "#EBE4D6" align="center">' .wartosc_platnosci($row[5]). ' zl<br />' .date('m.d', strtotime($row[3])). '</td>';
  13. <------> $m++;
  14. <------>} else {
  15. <------> if($m < "10") { $mc="0$m"; } else { $mc=$m; }
  16. <------> echo '<td align="center"><a href="dodaj.php?kid=' .$klient[id]. '&from_form&month=' .$rok. '-' .$mc. '-10">Dodaj platnosc</a></td>'; }
  17. <------> $m++;
  18. <------>}
  19. <------>echo '</tr>';
  20. }
  21. ?>


Działa on tak, że wybiera on wszystkie płatności klienta z dnego roku i przyporządkowuje je kolejnym miesiącom. Np. jeśli znajdzie 4 płatności, wskaże że klient ma opłacone od stycznia do kwietnia. Może się jednak zdażyć, że klient ma dwie usługi i w takim przypadku w tabeli platnosci pojawiaja sie dwa rekordy kazdego miesiaca. Problem jest taki, ze skrypt pokazuje, ze klient ma zaplacone do kwietnia gdy rzezcywiscie sa ta tylko platnosci ze stycznia i lutego, po dwie w kazdym miesiacu. W tabeli platnosci mam zanotowane za jaki miesiac to platnosc. Struktura wyglada tak:

Kod
Kolumna     Typ     Null     Domyślnie     Komentarze     MIME
id     int(11)     Nie                  
kid     int(11)     Nie            ID klienta ktoremu platnosc jest przyporzadkowana      
added     timestamp     Nie      CURRENT_TIMESTAMP            
date     datetime     Nie      0000-00-00 00:00:00      Data wplywu na moje konto     
month     datetime     Nie      0000-00-00 00:00:00      zaksiegowane za miesiac      
value     int(3)     Nie                  
notices     text     Nie


Osobiscie nie mam zadnego innego pomyslu, poza zapytaniem typu SELECT * FROM platnosci WHERE kid='$klient[id]' AND month LIKE '%$rok-$miesiac%' ale w przypadku gdy tabela ma 100 wierszy daje mi to juz 1200 zapytan na strone! Czy ktos ma pomysl jak to inaczej ogarnac? Z gory dzieki i pozdrawiam.


--------------------
Go to the top of the page
+Quote Post
mmmmmmm
post 30.06.2012, 15:19:55
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Uzyj takiego zapytania:
  1. SELECT k.`id`, k.`name`, Month(p.`month`)miesiac, Sum(p.`value`) razem FROM klienci k JOIN platnosci p ON k.id=p.kid WHERE k.city=$city GROUP BY 1,2,3 ORDER BY 1, 3
Go to the top of the page
+Quote Post
KR2615
post 4.07.2012, 14:29:58
Post #3





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

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


Zapytanie daje poprawną odpowiedź ale ie jest to to, o co mi chodzi. W rezultacie chciałbym dostać id, kwotę, nazwę płatności które klient wpłacił danego miesiaca a nie sumę kwoty jaka wpłyneła na konto. Inaczej chodzi o to, żeby było wyraźnie widac że klient płaci za kilka usług lub puszcza parę przelewów danego miesiaca.

Edit: Oto przykładowe zapytanie do bazy i rezultat żeby było jasniej:

  1. Zapytanie SQL: SELECT * FROM platnosci WHERE customerid='1234' AND month LIKE '%2012-%' ORDER BY month ASC LIMIT 0, 100 ;
  2. Rekordów: 9
  3. id customerid added date (DATA wplywu na konto) month (zaksiegowane za miesiac) value notices
  4. 22214 1234 2012-03-07 10:00:03 2012-02-27 00:00:00 2012-01-10 00:00:00 39.99
  5. 22742 1234 2012-04-03 15:03:14 2012-03-26 00:00:00 2012-02-10 00:00:00 39.99
  6. 22743 1234 2012-04-03 15:03:24 2012-03-26 00:00:00 2012-03-10 00:00:00 19.99
  7. 23798 1234 2012-05-09 14:22:58 2012-04-25 00:00:00 2012-03-10 00:00:00 39.99
  8. 23799 1234 2012-05-09 14:23:09 2012-04-25 00:00:00 2012-04-10 00:00:00 19.99
  9. 25305 1234 2012-06-28 09:43:27 2012-05-25 00:00:00 2012-04-10 00:00:00 39.99
  10. 24465 1234 2012-06-04 16:29:56 2012-05-25 00:00:00 2012-05-10 00:00:00 19.99
  11. 25306 1234 2012-06-28 09:44:52 2012-06-25 00:00:00 2012-05-10 00:00:00 39.99
  12. 25304 1234 2012-06-28 09:37:12 2012-06-25 00:00:00 2012-06-10 00:00:00 19.99


Ten post edytował ksysinek 4.07.2012, 14:37:08


--------------------
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 - 05:13