Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 17 odgovora
  • 3.564 pregleda

Najnovija ↓

While inside while 19.05.2012. u 12:44 · pre 175 meseci #1
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
Re: While inside while 19.05.2012. u 13:36 · pre 175 meseci #2
- 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.
Re: While inside while 19.05.2012. u 13:59 · pre 175 meseci #3
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.

Potpis
http://pedja.supurovic.net - http://wireless.uzice.net - Besplatni .RS domeni - Mikrotik uputstva - YT9TP - OpenStreetMap Srbija
Re: While inside while 19.05.2012. u 18:14 · pre 175 meseci #5
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...
Re: While inside while 19.05.2012. u 18:33 · pre 175 meseci #6
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...
Re: While inside while 19.05.2012. u 19:14 · pre 175 meseci #7
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
Re: While inside while 19.05.2012. u 19:35 · pre 175 meseci #8
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...
Re: While inside while 19.05.2012. u 19:39 · pre 175 meseci #9
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`
Re: While inside while 21.05.2012. u 10:14 · pre 175 meseci #10
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
Re: While inside while 21.05.2012. u 10:26 · pre 175 meseci #11
probaj neki if empty pa onda u zavisnosti da li je prazno ili ne štampaš sadržaj ili štampaš N/A
Re: While inside while 21.05.2012. u 10:36 · pre 175 meseci #12
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
Re: While inside while 21.05.2012. u 12:56 · pre 175 meseci #14
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.
Re: While inside while 21.05.2012. u 22:02 · pre 175 meseci #15
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 :)
Re: While inside while 22.05.2012. u 23:49 · pre 175 meseci #17
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 :)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme