Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Jak wyliczyć wyniki z zapytania
dopal
post
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 9.02.2009

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


Witam,

Mam dwie tabele w bazie ( nie wypisuje wszystkich pól, tylko te co są istotne przy moim problemie):
tab.a1
ID | nazwa | numer|
1 | cytryna| 1001|
2 |kiwi | 1002|
3 |banan | 1003|
4 |jabłko | 1004|
itd.

tab.b1
ID |nr2 | czas | atrybut|
1 | 1001| 20130105 | h|
2 | 1001 | 20130108 | r |
3 | 1001| 20130110 | h|
4 |1002 | 20130106 | h|
5 | 1002| 20130109 | h|
6 |1003 | 20130114 | r|
7 |1003 |20130115 | r|
8 |1004 |20130110 | a|

Pierwsza część działa mi prawidłowo, otrzymuję wszystkie wyniki spełniające zapytanie

  1. <?php
  2.  
  3. $query="SELECT * FROM a1 inner join b1 where numer=nr2 and czas2 between '20130101' AND '20130115' group by nazwa, atrybut";
  4.  
  5. $result=mysql_query($query) or die( odbc_error());
  6. $ilosc = mysql_num_rows($result);
  7.  
  8. $i = 0;
  9. while( $set = mysql_fetch_assoc( $result)){
  10. $i++;
  11.  
  12. $wynik = $i%2;
  13. if($wynik == "0"){
  14. $kolor = "white";}
  15. else {
  16. $kolor = "lightgreen";
  17. }
  18. echo '<tr bgcolor='.$kolor.'><td width="5%">'.$i.'.</td>
  19. <td width="25%">'.$set['nazwa'].'</td>
  20. <td width="12%">'.$set['nr2'].'</td>
  21. <td width="12%">'.$set['atrybut'].'</td>
  22. </tr>';
  23.  
  24. }?>

w wyniku otrzymuję taką tabelkę:

1.cytryna 1001 h
2.cytryna 1001 r

3.kiwi 1002 h
4.banan 1003 r
5.jabłko 1004 a

Teraz chciałbym by nastapiło zliczenie wg takiego rozwiązania po atrybutach.
Jeśli dana produkt ( np. cytryna ) wystepuje w dwóch wynikach z różnymi atrybutami ( h, r ) to chcę by to było zliczone jako h
i by w tabeli poniżej nastepowało sumowanie po atrybutach
(analogicznie sobie już pozostałe ustawienia dopasuję )

czyli w tym przypadku:
atrybut h - 2 ( czyli cytryna i kiwi )
atrybut r - 1 ( czyli banan)
atrybut a - 1 (czyli jabłko )

  1.  
  2. //nie wiem w jaki sposób osiągnąć to co wyżej opisałem.
  3.  
  4. echo ' <tr bgcolor='.$kolor.'><td width="5%">1.</td>
  5. <td width="25%">'.$ilosc.'</td>
  6. ';
  7. ?>

W jaki sposób można to zrobić, proszę o jakieś podpowiedzi i wskazówki.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dopal
post
Post #2





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 9.02.2009

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


Po przerobieniu kod wygląda jak poniżej, mam jednak parę pytań.
Z tabeli dawcy interesują mnie tylko pola: DADWNR, DADWNZ, DADWIM, DADWPS, DADWA1, DADWA2, DAPLNR
z tabeli oddania tylko: ODDNR1, ODDWNR, ODDNNR, ODDNDT
obie z tych tabel zawierają więcej pól

  1. <?
  2. $query="SELECT DADWNR, DADWNZ, DADWIM, DADWPS, DADWA1, DADWA2, DAPLNR, ODDNR1, ODDWNR, ODDNNR, ODDNDT FROM DAWCY
  3. INNER JOIN ODDANIA on DADWNR=ODDWNR AND DAPLNR=ODPLNR
  4. WHERE
  5. ODDNDT Between '20121231' And '20121231' AND ODDNKD='E5' OR
  6. ODDNDT Between '20121231' And '20121231' AND ODDNKD='EA' OR
  7. ODDNDT Between '20121231' And '20121231' AND ODDNKD='EK' OR
  8. ODDNDT Between '20121231' And '20121231' AND ODDNKD='EP' ";
  9.  
  10. //SPRAWA 1
  11. //chciałem by w zapytaniu było grupowanie, na końcu dodałem GRUOP BY ODDWNR, ODDNR1 otrzymuję komunuikat
  12. //Warning: odbc_exec() [function.odbc-exec]: SQL error: [IBM][Sterownik ODBC iSeries Access][DB2 UDB]SQL0122 -
  13. // Niepoprawna kolumna DADWNR lub wyra�enie na li�cie SELECT., SQL state S1000 in SQLExecDirect in D:\www\apache\htdocs\zest_magpoj.php
  14. //on line 164 S1000
  15. //jak powinno wyglądać poprawnie zapytanie w tym przypadku?
  16.  
  17. $result = odbc_exec($connect, $query) or die( odbc_error());
  18.  
  19. $ilosc = odbc_num_rows($result);
  20. ?>
  21. <table border="1">
  22. <tr bgcolor="#24FF19"><td width="3%" align="center"><b>Lp.</b></td>
  23. <td align="center"><b>Nr plac.</b></td>
  24. <td align="center"><b>Nazwa skł.</b></td>
  25. <td align="center"><b>Placówka don.</b></td>
  26. <td align="center"><b>Nr don.</b></td>
  27. <td align="center"><b>Pojemnik</b></td>
  28. <td align="center"><b>Zwrot</b></td>
  29. <td align="center"><b>flaga</b></td>
  30. <td align="center"><b>dostawca</b></td>
  31. <td align="center"><b>Odbiorca</b></td>
  32. <td align="center"><b>Poj. zwrocony</b></td>
  33. <td align="center"><b>Data don</b></td>
  34. </tr>
  35.  
  36. <?php
  37. $x=0;
  38. while(odbc_fetch_row($result)) {
  39.  
  40. $x++;
  41.  
  42. $a1 = odbc_result($result, 1);
  43. $a2 = odbc_result($result, 2);
  44. $a3 = odbc_result($result, 3);
  45. $a4 = odbc_result($result, 4);
  46. $a5 = odbc_result($result, 5);
  47. $a6 = odbc_result($result, 6);
  48. $a7 = odbc_result($result, 7);
  49. $a8 = odbc_result($result, 8);
  50. $a9 = odbc_result($result, 9);
  51. $a10 = odbc_result($result, 10);
  52. $a11 = odbc_result($result, 11);
  53.  
  54.  
  55. {
  56. echo '<tr ><td align="center">'.$x.'</td>
  57. <td align="center">'.$a1.'</td>
  58. <td align="center">'.$a2.'</td>
  59. <td align="center">'.$a3.'</td>
  60. <td align="center">'.$a7.'</td>
  61. <td align="center">'.$a4.'</td>
  62. <td align="center">'.$a5.'</td>
  63. <td align="center">'.$a6.'</td>
  64. <td align="center">'.$a8.'</td>
  65. <td align="center">'.$a9.'</td>
  66. <td align="center">'.$a10.'</td>
  67. <td align="center">'.$a11.'</td>
  68.  
  69. </tr>';
  70. }}
  71. ?>


Przy takim założeniu otrzymuję wynik 98 co odpowiada faktycznemu stanowi ( docelowo jednak musi być też grupowanie)


Sprawa druga czyli sumowanie po atrybutach czyli po polu ODDNR1
  1. //$a11 = odbc_result($result, 11);
  2. //po tej lini dodaje ten kod co poniżej
  3. //przy takim zapisie wyswietla mi w tabeli połowe wyników czyli 49, tak jak by brał co drugi
  4.  
  5. $dane[]=odbc_fetch_row($result);
  6.  
  7. $tab_h=array();
  8. $tab_r=array();
  9. $tab_p=array();
  10. $tab_a=array();
  11.  
  12. foreach ($dane as $item) {
  13.  
  14. if($item['oddnr1']=='H')
  15. $tab_h[]=$item['oddwnr'];
  16. }
  17.  
  18. foreach ($dane as $item) {
  19. if($item['oddnr1']=='R' && !in_array($item['oddwnr'],$tab_h))
  20. $tab_r[]=$item['oddwnr'];
  21. }
  22. foreach ($dane as $item) {
  23. if($item['oddnr1']=='P' && !in_array($item['oddwnr'],$tab_h)&& !in_array($item['oddwnr'],$tab_r))
  24. $tab_p[]=$item['oddwnr'];
  25. }
  26. foreach ($dane as $item) {
  27. if($item['oddnr1']=='A' && !in_array($item['oddwnr'],$tab_h)&& !in_array($item['oddwnr'],$tab_r)&& !in_array($item['oddwnr'],$tab_p))
  28. $tab_a[]=$item['oddwnr'];
  29. }
  30. // powyższy zapis nie daje mi oczekiwanego wyniku zliczania, co świadczy że składnia jest zła, jak to powinno wyglądać prawidłowo
  31.  
  32. {
  33. echo '<tr ><td align="center">'.$x.'</td>
  34. <td align="center">'.$a1.'</td>
  35. <td align="center">'.$a2.'</td>
  36. <td align="center">'.$a3.'</td>
  37. <td align="center">'.$a7.'</td>
  38. <td align="center">'.$a4.'</td>
  39. <td align="center">'.$a5.'</td>
  40. <td align="center">'.$a6.'</td>
  41.  
  42. <td align="center">'.$a8.'</td>
  43. <td align="center">'.$a9.'</td>
  44. <td align="center">'.$a10.'</td>
  45. <td align="center">'.$a11.'</td>
  46.  
  47. </tr>';
  48. }}
  49. //oczywiście poniżej nie wyświetlaja mi się wyniki wg założeń, tylko 0
  50. print_r($dane);
  51. echo 'Atrybut h: '.count($tab_h).'<br />';
  52. echo 'Atrybut r: '.count($tab_r).'<br />';
  53. echo 'Atrybut p: '.count($tab_p).'<br />';
  54. echo 'Atrybut a: '.count($tab_a).'<br />';
  55.  
  56. ?>


Ten post edytował dopal 12.02.2013, 08:26:36
Go to the top of the page
+Quote Post

Posty w temacie
- dopal   [MySQL][PHP]Jak wyliczyć wyniki z zapytania   11.02.2013, 10:53:13
- - nospor   Tworzysz tyle tablic ile masz atrybutów. Lecisz w...   11.02.2013, 13:15:06
- - dopal   kombinuje jak to zroić, ale mi niestety nie wychod...   11.02.2013, 14:15:28
- - mmmmmmm   Podałeś, co masz na wejściu. Pokaż wyjście, a poka...   11.02.2013, 19:34:37
- - dopal   Po przerobieniu kod wygląda jak poniżej, mam jedna...   12.02.2013, 08:25:57
- - nospor   @dopal algorytm co ci podałem miałes robić w jedne...   12.02.2013, 09:09:19
|- - dopal   Cytat(nospor @ 12.02.2013, 09:09:19 )...   12.02.2013, 09:15:23
- - nospor   To nie ma żadnej różnicy. Petla do pobierania dany...   12.02.2013, 09:18:25
- - dopal   [PHP] pobierz, plaintext ?php$x=0;while($set=o...   12.02.2013, 09:43:26
- - nospor   Po co te FOEREACH w głównej petli? Po co to: ...   12.02.2013, 09:53:34
- - dopal   Nie wiem jak to ma byc, możesz to konkretnie podać...   12.02.2013, 10:10:03
- - nospor   Z Twojego opisu (z tego w temacie i z tego na PW) ...   12.02.2013, 10:21:15
- - dopal   Tak. Element może być np. 3 razy w h, p, r - wtedy...   12.02.2013, 10:26:58
- - nospor   Dobra, zmiana algorytmu. Może trochę dłuższy, ale ...   12.02.2013, 10:38:01
- - dopal   [PHP] pobierz, plaintext $element = array(...   12.02.2013, 10:55:27
- - nospor   NIe.... Nie: $element['ODDNR1'] = H;...   12.02.2013, 10:57:45
- - mmmmmmm   Wstaw odpowiednie nawiasy do SQL (WHERE), bo teraz...   12.02.2013, 11:06:42
- - dopal   No to będzie problem bo tych nazw będzie dużo. W t...   12.02.2013, 11:16:57
- - nospor   CytatNo to będzie problem bo tych nazw będzie dużo...   12.02.2013, 11:23:32
- - dopal   Pracuje jako osoba ds. organizacyjnych w służbie z...   12.02.2013, 11:28:31
- - nospor   Dziękuje. Bo juz się bałem że jako programista T...   12.02.2013, 11:33:55
- - dopal   [PHP] pobierz, plaintext $element = array(...   12.02.2013, 11:34:16
- - nospor   Moj poprzedni post i dopisek Cytata tutaj też nie ...   12.02.2013, 11:34:57
- - dopal   Programować, to ja mogę....programy w telewizorze,...   12.02.2013, 11:36:03
- - nospor   [PHP] pobierz, plaintext $element = array(...   12.02.2013, 11:40:09
- - dopal   [PHP] pobierz, plaintext  <?php$x=0;...   12.02.2013, 11:54:10
- - nospor   zamiast and używaj && - wizualnie mi to le...   12.02.2013, 11:56:06
- - dopal   Parse error: syntax error, unexpected T_WHILE in D...   12.02.2013, 12:00:11
- - Michasko   Brakuje Ci średnika przed 'while' :)   12.02.2013, 12:02:24
|- - dopal   Cytat(Michasko @ 12.02.2013, 12:02:24...   12.02.2013, 12:06:56
- - Michasko   Linijka 7 - niedomknięty nawias okrągły. Musisz za...   12.02.2013, 12:08:39
- - nospor   Literowka.... isset ma sie szybko konczyc. Tak ma ...   12.02.2013, 12:09:17
- - dopal   Czytam, tylko ja już nad tym od wczoraj siedzę, po...   12.02.2013, 12:12:39
- - nospor   $nazwaelementu = $row['ODDWNR'];...   12.02.2013, 12:17:41
|- - dopal   Cytat(nospor @ 12.02.2013, 12:17:41 )...   12.02.2013, 12:21:31
- - nospor   No ale poprawiles? Nadal print_r nic ci nie zwraca...   12.02.2013, 12:23:32
- - dopal   RE: [MySQL][PHP]Jak wyliczyć wyniki z zapytania   12.02.2013, 12:25:56
- - nospor   hm.... czy twoje nazwy elementu to liczby ala 1008...   12.02.2013, 12:29:05
- - dopal   Tak, nazwy elementu to liczby, a do tych liczb prz...   12.02.2013, 12:33:26
- - nospor   nie: $tab_h[] =$el++; a: $tab_h[] =...   12.02.2013, 12:42:21
- - dopal   I lepiej rzebyś nie pytał [PHP] pobierz, plainte...   12.02.2013, 12:45:10
- - nospor   Rozumiem, że już działa?   12.02.2013, 12:47:13
- - dopal   Wyniki otrzymuję, więc chyba jest ok. Pozstaje jes...   12.02.2013, 12:47:48
- - nospor   A w jakim celu?   12.02.2013, 12:49:48
- - dopal   To jest ten fragment co pisałem wcześniej: W tabe...   12.02.2013, 12:54:42
- - nospor   Chyba właśnie zdurniałem..... to niby co my do tej...   12.02.2013, 12:57:57
- - phpion   Nie czytałem całego wątku, ale czy zapytanie przyp...   12.02.2013, 13:06:10
- - dopal   Po części tak, ale ( może się mylę) Jesli np. kowa...   12.02.2013, 13:07:25
|- - phpion   Cytat(dopal @ 12.02.2013, 13:07:25 ) ...   12.02.2013, 13:09:59
|- - dopal   Cytat(phpion @ 12.02.2013, 13:09:59 )...   12.02.2013, 13:11:44
- - nospor   CytatJesli np. kowalski oddał w ciągu roku krew 5 ...   12.02.2013, 13:17:05
- - dopal   Ok, chyba masz rację...za duzo tego było od wczora...   12.02.2013, 13:21:24


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: 6.10.2025 - 05:28