Autor Zpráva
disler
Profil
Žádám o pomoc s následujícím problémem.

Podmínka mi vrátí hodnoty, které musím mít v cyklu jelikož neznám jejich počet:
SELECT id FROM eshop_kategorie


Vrátí to např.: 1,2,3

Všechny tyto hodnoty potřebuji načíst buď do proměnné a dosadit níže do in() nebo je tam nějakým jiným způsobem vepsat.:
SELECT * FROM eshop_produkty WHERE kategorie in('1','2','3')



Jde o to, že nemohu použít cyklus while, jeho výsledek nedokážu vměsnad do jedné $ ani jej nemůžu umístit do parametru in() rovnou.

Měl by někdo nějaký nápad, jak pole hodnot načíst do jedné $ ?

Nebo jakým způsobem se správně řeší výpis všech produktů z eshopu podkategorií, aby když jsem v hlavní kategorii jsem viděl všechny produkty z podkategorií?

Hlavní kategorie
- podkategorie 1
- podkategorie 2
- podkategorie 3

Tabulka produktů má strukturu id, kategorie (tzn. kam patří), nazev


Díky za pomoc.
joe
Profil
SELECT * FROM eshop_produkty WHERE kategorie IN (SELECT id FROM eshop_kategorie)
disler
Profil
díky, toto řešení sice funguje ale neřeší cyklus, stále vypisuje pouze 1 údaj z mysql, nefunguje to jako cyklus...

Pomohl by někdo?

Díky.
saphire
Profil
disler:
$podminka = array();
while($idcko = mysql_fetch_array($vysledek_dotazu))
{
  $podminka[] = $idcko;
}

$dotaz_podminka = vytvor_seznam($podminka);

$dotaz = "SELECT * FROM eshop_produkty WHERE kategorie IN (".$dotaz_podminka.");");

/**
  *vytvori seznam cisel oddeleny carkami z pole
  *@author Stanley Saphire
  */
function vytvor_seznam($cislicka){
  $seznam = '';
      $t=count($array)-1;
      foreach($cislocka as $cislicko){
        $seznam.= "'".$cislocko."'".(($t)?",":" ");
        $t--;
      }
  return $seznam;
}
nightfish
Profil
pokud předpokládáme, že id kategorie jsou celá čísla, pak lze kód z [#4] zkrátit a opravit na
$podminka = array();
while(list($idcko) = mysql_fetch_array($vysledek_dotazu))
{
  $podminka[] = $idcko;
}
if (count($podminka) == 0) $podminka[] = 'NULL';
$dotaz = "SELECT * FROM eshop_produkty WHERE kategorie IN (".implode(', ', $dotaz_podminka).");");

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0