[ slavo.k @ 19.05.2012. 11:44 ] @
Pozdrav.
Pokusavam da izvucem vrednosti iz dve tabele iz baze kroz jednu while petlju i da rezultate smestim kroz jedan red a dve kolone tabele. Prva kolona je naziv specifikacije, a druge dve su vrednosti. Uradio sam ovo, ali nikako ne uspeva. Tipa, product comparation kao ovo: http://www.mobilnisvet.com/compare.php?a=3196&b=&c=
Code:

$result = 'select nesto from tabela1'  //izvucem ono sto mi treba iz jedne tabele
$result2 = 'select nesto from tabela2' //izvucem ono sto mi treba iz druge tabele

while (($info = mysql_fetch_array($result, MYSQL_ASSOC)) || ($info = mysql_fetch_array($result2, MYSQL_ASSOC)) ) {

    echo '<tr>';
    echo '<td>'.$info['value'].'</td><td>'.$info['value'].'</td>';
    echo '</tr>';

}

Ovako necu dobiti ono sto treba, pokusavao sam while inside while ali ne ide. Ako nesto moze da pomogne, bilo bi super
[ plague @ 19.05.2012. 12:36 ] @
- Koristis OR operator koji cim u while-u naidje na true vrednost preseca izvrsavanje daljih provera. Znaci neces ni dohvatiti red iz drugog upita. Treba ti &&. Samo ako oba rezultata vrate po red radi...
- $info je promenljiva u kojoj se smesta jedan red iz rezultata, a ti je koristis 2x i samim tim prepisujes ono sto si zapamtio.
[ Predrag Supurovic @ 19.05.2012. 12:59 ] @
Ceo ovaj kod ti je besmislen. Ako već imać dva niza kojima su indeksi isti, onda u while tretiraj jedan od njih a iz drugog samo pokupi podatak preko indeksa.

Mada, ja bih to lepo sastavio JOIN-om u SQL upitu i jedan niz u kome je sve vec složeno kako treba.

[ slavo.k @ 19.05.2012. 13:22 ] @
Da Da! BAs glupa greska. Hvala puno.
[ slavo.k @ 19.05.2012. 17:14 ] @
Ne moze da ide JOIN jer se vrednosti specifikacija proizvoda, koje su u istoj tabeli. Gore sam pogresno naveo. Specifikacija je u jednoj, a njena vrednost u drugoj, tabele se spoje po uslovu spajanja i dobije se npr: Tezina: 5kg
Boja: Plava
, sada treba uporediti sa nekim drugim proizvodom čuje se vrednosti izvuku, ali samo mi je problem smestiti ih, kao na mobilnom svetu sto je odradjeno...
[ Milos911 @ 19.05.2012. 17:33 ] @
Code (php):

while($rowT = mysql_fetch_assoc($queryT)){
   $first_array[] = $rowT;
}

while($rowT2 = mysql_fetch_assoc($queryT)){
   $second_array[] = $rowT2;
}

foreach($first_array as $key=>$value){
echo "prva vrednost je ".$value['neka_kolona'];
echo "druga prva vrednost je ".$second_array[$key]['neka_kolona'];
}
 

Mozes i da eliminises first_array, prvo uhvatis second_array, pa onda direktno u prvom while radis ispis. Al mislim da je ovaj moj nacin malo cistiji...
[ slavo.k @ 19.05.2012. 18:14 ] @
Da, to je ok, sad samo pravi problem kad se npr kod jednog proizvoda ne izvuce vrednost specifikacije, ne kreira se prazna kolona vec se ispomera, tipa ovo:

CPU: AMD | INTEL
RAM: 2 GB | 4GB
HDD:500 GB | Plava
Boja: Crna | Audio...

Hvala puno
[ Milos911 @ 19.05.2012. 18:35 ] @
To je lakse resiti preko sql-a, daj create table za te dve tabele koje imas, da ne lupamo napamet...

A sad kad razmislim, nesto mi zesce nema logike, al ajde daj taj create table pa da vidimo...
[ slavo.k @ 19.05.2012. 18:39 ] @
Code:

CREATE TABLE IF NOT EXISTS `SetSpecification` (
  `anSpec` smallint(5) NOT NULL auto_increment,
  `acName` varchar(40) NOT NULL,
  `acActive` tinyint(1) default '1',
  `filter` tinyint(1) NOT NULL default '1',
  `nOrder` smallint(6) NOT NULL default '0',
  `anClassif` smallint(5) default NULL,
  `adTimeChg` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `sname` varchar(40) character set utf8 collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`anSpec`),
  UNIQUE KEY `acName` (`acName`,`anClassif`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2282 ;


CREATE TABLE IF NOT EXISTS `LinkItemSpec` (
  `id` int(11) NOT NULL auto_increment,
  `acIdent` varchar(20) NOT NULL,
  `anSpec` smallint(5) NOT NULL,
  `acValue` varchar(2000) NOT NULL,
  `acActive` char(1) NOT NULL default 'T',
  `adTimeChg` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `acIdent` (`acIdent`,`anSpec`),
  KEY `acValue` (`acValue`(255)),
  KEY `anSpec` (`anSpec`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=69860 ;

--
-- Dumping data for table `LinkItemSpec`
[ slavo.k @ 21.05.2012. 09:14 ] @
Ne znam da li si skopčao šta pokušavam srediti.Ako recimo na jednom artiklu imam 3 specifikacije, na drugom 4, kako da kreiram praznu kolonu, da ne dodje do pomeranja.

Boja: BEla | CRna
Suma: 5 | 6
Napomena: gfdgs | 2 meseca
Garancija: 2 |


da prikazem ovako


Boja: BEla | CRna
Suma: 5 | 6
Napomena: gfdgs |
Garancija: 2 | 2 meseca
[ PHPovac @ 21.05.2012. 09:26 ] @
probaj neki if empty pa onda u zavisnosti da li je prazno ili ne štampaš sadržaj ili štampaš N/A
[ slavo.k @ 21.05.2012. 09:36 ] @
ma mislim da to ne može da prodje, jer konkretno artiklu nije pridružena vrednost specifikacije, a ovim izvlacim:
Code:

'SELECT a.acValue AS value, b.acName AS label FROM LinkItemSpec a JOIN SetSpecification b ON a.anSpec = b.anSpec WHERE b.acActive = 1 AND a.acIdent = \''.$id.'\' ORDER BY b.nOrder'


iznad je create table, ako te ne mrzi da bacis pogled
[ Predrag Supurovic @ 21.05.2012. 10:17 ] @
Sve to rešava lepo sročen left join.

[ slavo.k @ 21.05.2012. 11:56 ] @
Pa ja sam lud il ista je vec u pitanju, kombinovao sam i JOIN, ali ne uspeva. Ovo je konkretno primer jednog artikla i njegovih specifikacija i vrednosti specifikacija.
[ Milos911 @ 21.05.2012. 21:02 ] @
Citat:
slavo.k: Ne znam da li si skopčao šta pokušavam srediti.Ako recimo na jednom artiklu imam 3 specifikacije, na drugom 4, kako da kreiram praznu kolonu, da ne dodje do pomeranja.

Ukapirao sam, al iskreno ne mogu da se snadjem sa ovim tabelama (ako te ne mrzi, daj malo podataka da unesem, pa da vidim).
Ovako peske, mozes da uradis sledece
Code:

while($rowT = mysql_fetch_assoc($queryT)){
   foreach($rowT as $key=>$value){    
   $tmpTA = array($key=>$value);//ovo nece raditi, ne mogu sad da se setim tacne sintakse. 
//Ako ovaj while hvata samo jedan proizvod, treba da spakujes sve u formatu gde ce ti key biti ime kategorije, a value vrednost koja pripada toj kategoriji
   }
   $first_array[] = $tmpTA;


}

//isto za drugu kolonu

foreach($first_array as $key=>$value){
   foreach($value as $key2=>$value2){
      echo "ime kategorije je".$key2;
      echo "prva vrednost je ".$value2['neka_kolona'];
      echo "druga prva vrednost je ".$second_array[$key]['key2']['neka_kolona'];
   }
}

Ovo ce raditi ako su podaci koje dobijas iz baze u formatu:
Code:

Proizvod jedan:
Boja: Bela
Suma: 5
Napomena: gfdgs 
Garancija: 2

Proizvod 2:
Boja: Bela
Suma: 5
Napomena: gfdgs 
Garancija: 2

Ono sto ce ti biti problem je ako drugi proizvod ima nesto sto prvi nema. To mozes resiti tako sto ces prebrojati koliko koji proizvod ima stavki, pa onda na osnovu onog veceg kreirati tabelu.

Al opet napominjem, ne mogu da se snadjem sa ovim tabelama, i verovatno postoji elegantnije resenje. Probacu opet sutra kad budem odmoran, pa javljam :)
[ slavo.k @ 22.05.2012. 07:15 ] @
Pa da to je problem, jer proizvod nema specifikaciju, ako mu se ne unese vrednost specifikacije. Evo sličica...
Fala gde čuo i gde ne čuo :)
[ Milos911 @ 22.05.2012. 22:49 ] @
Code (php):

<?php

$product_queryA = array(
     "product_identification"=>"",
     "product_identification"=>"",
     "product_identification"=>"",
     "product_identification"=>""
     );
     
$biggest_table_count =  0;
$biggest_table_identification =  false;

foreach($product_queryA as $key=>$value){//foreach da uzmemo sve podatke
     $queryT = mysql_query($value);

     //glavni array, verovatno nece raditi, vidi dole za format
     $product_details[$key]= array(
          "count"=>mysql_affected_rows($queryT),//ovo nam izgleda ne treba, moze da se uradi donji count bez ove vrednosti definisane u array
          "data"=>false//ovo obavezno
          );
     
     if(mysql_affected_rows($queryT)>0){
          while($rowT = mysql_fetch_assoc($queryT)){
               //veoma je bitno da key bude ime kategorije, da bismo kasnije mogli da
               //pristupimo vrednosti uz pomoc glavnog kljuca
               $product_details[$key]["data"][] = array($rowT['ime_kategorije']=>$rowT['vrednost'];
               };
          }
     if($product_details[$key]['count'] >= $biggest_table_count){
          $biggest_table_count = $product_details[$key]["count"];
          $biggest_table_identification = $product_details[$key];//da znamo koju tabelu prvu da prikazemo
          };
     };
if(is_array($product_details[$biggest_table_identification]['data'])){
     foreach($product_details[$biggest_table_identification]['data'] as $key=>$value){//ovako znamo koliko redova treba da kreiramo
          echo "kategorija:".$key."<br/>";
          echo "vrednost:".$value."<br/>";
          foreach($product_queryA as $key2=>$value2){
               if($product_identification != $biggest_table_identification){//da ne ponovimo ispis najvece tabele
                    echo "$vrednost:".$product_details[$key2]['data'][$key];//key2 je trenutni product, key je ime kategorije
                    }
               }
          }
     }
     
//product details treba da izgleda ovako
$product_details = array(
     "product_identification"=>array(
                    "data"=>false //ako nema nadjenih vrednosti
                    ),
     "product_identification"=>array(
                    "data"=>array(
                         "ime kategorije"=>"vrednost",
                         "ime kategorije"=>"vrednost"
                         )
                    )
     );
?>


 

Srecno :)
[ slavo.k @ 23.05.2012. 11:38 ] @
Hvala druze puno!