Mam tabelę ODDANIA, w niej jest ok 40 pól, przy tym co chcę zrobić interesuje mnie tylko 6. Baza nie jest moja, ja jedynie z niej korzystam dla usprawnienia pracy.
Poniżej jest kod, który działa przy takich założeniach jak są zrobione.
$query="SELECT ODPLNR, ODDWNR, ODDNR1, ODDNKD, ODDNNR, ODDNDT FROM ODDANIA WHERE ODDNDT Between '20120101' And '20121231' AND ODDNKD ='E5' OR ODDNDT Between '20120101' And '20121231' AND ODDNKD ='EK' OR ODDNDT Between '20120101' And '20121231' AND ODDNKD ='EP' "; while($set=odbc_fetch_array($result)){ $ODDWNR = $set['ODDWNR'] ; if($set['ODDNR1']=='H'){ $element[$ODDWNR] = 'H'; } $element[$ODDWNR] = 'R'; } if($set['ODDNR1']=='P' && (!isset($element[$ODDWNR]) || $element[$ODDWNR]!='H' && $element[$ODDWNR]!='R')){ $element[$ODDWNR] = 'P'; } if($set['ODDNR1']=='A' && (!isset($element[$ODDWNR] )|| $element[$ODDWNR]!='H' && $element[$ODDWNR]!='R' && $element[$ODDWNR]!='P')){ $element[$ODDWNR] = 'A'; } if($set['ODDNR1']=='B' && (!isset($element[$ODDWNR] )|| $element[$ODDWNR]!='H' && $element[$ODDWNR]!='R' && $element[$ODDWNR]!='P' && $element[$ODDWNR]!='A')){ $element[$ODDWNR] = 'B'; } foreach ($element as $el => $atr){ if ($atr=='H') { $tab_h[] =$el;} if ($atr=='R') { $tab_r[] =$el;} if ($atr=='P') { $tab_p[] =$el;} if ($atr=='A') { $tab_a[] =$el;} if ($atr=='B') { $tab_b[] =$el;} }}
Myślałem ze unikatowym polem jest ODDWNR, więc przy takim założeniu wszystko działa prawidłowo i otrzymywałem ok 16 tys. wyników. Jednak okazało się że połączenie unikatowe to połączenie ODPLNR, ODDWNR. To stanowi dopiero unikalny numer czyli np. ODPLNR=1234 ODDWNR=98765 czyli całością powinno być 123498765 i powinienem uzyskać ponad 20 tys. wyników
Próbowałem zrobić to tak
$query="SELECT CONCAT(ODPLNR, ODDWNR) as numer, ODDNR1, ODDNKD, ODDNNR, ODDNDT FROM ODDANIA WHERE ODDNDT Between '20120101' And '20121231' AND ODDNKD ='E5' OR ODDNDT Between '20120101' And '20121231' AND ODDNKD ='EK' OR ODDNDT Between '20120101' And '20121231' AND ODDNKD ='EP' "; while($set=odbc_fetch_array($result)){ $ODDWNR = $set['numer'] ; //dalsza część kodu bez zmian
Przy takim zapisie w wynikach otrzymuję:
Atrybut h: 1
Atrybut r: 0
Atrybut p: 0
Atrybut a: 0
Atrybut b: 0
co oczywiście nie jest oprawdą.
Dalej próbowałem tak:
$query="SELECT ODPLNR, ODDWNR, ODDNR1, ODDNKD,ODDNNR, ODDNDT FROM ODDANIA WHERE ODDNDT Between '20120101' And '20121231' AND ODDNKD ='E5' OR ODDNDT Between '20120101' And '20121231' AND ODDNKD ='EK' OR ODDNDT Between '20120101' And '20121231' AND ODDNKD ='EP' "; while($set=odbc_fetch_array($result)){ $ODDWNR = $set['ODDWNR'] ; $ODPLNR = $set['ODPLNR']; if($set['ODDNR1']=='H'){ $element[$ODDWNR && $ODPLNR] = 'H'; } //dalsza cześć analogicznie przerobiona //lub taki sposób while($set=odbc_fetch_array($result)){ $numer1 = $set['ODDWNR'] ; $numer2 = $set['ODPLNR']; $ODDWNR=$numer1 && $numer2; if($set['ODDNR1']=='H'){ $element[$ODDWNR] = 'H'; } //lub tak while($set=odbc_fetch_array($result)){ $ODDWNR = $set['ODDWNR'] && $set['ODPLNR']; if($set['ODDNR1']=='H'){ $element[$ODDWNR] = 'H';
I przy takich próbach zawsze było w wynikach
Atrybut h: 1
Atrybut r: 0
Atrybut p: 0
Atrybut a: 0
Atrybut b: 0
Gdzie może tkwić problem?