Autor Zpráva
Stepanka
Profil *
Ahoj,

prosím, mohl by mi někdo pomoct s jedním problémem?

Mám URL v tomto tvaru:
http://eshop1.cz/porovnani.html?id=24,21,30,26

kde ty čísla v $_GET['id'] jsou IDčka porovnávaných produktů.

A pak mám SQL dotaz, takový:

SELECT  
p.id AS id_produkt, 
m.$nazev AS produkt, 
f.file AS img, 
sp.$nazev AS polozka,  
sh.$nazev AS hodnota 
FROM ".TBL_PREFIX."produkty p
LEFT JOIN ".TBL_PREFIX."produkty_foto f ON f.id_produkt=p.id  AND f.razeni=0
JOIN ".TBL_PREFIX."produkty_matky m ON p.id_matka=m.id_matka 
LEFT JOIN ".TBL_PREFIX."sablony_obsah so ON p.id=so.id_produkt 
LEFT JOIN ".TBL_PREFIX."sablony_hodnoty sh ON so.id_hodnota=sh.id_hodnota 
LEFT JOIN ".TBL_PREFIX."sablony_polozky sp ON sh.id_polozka=sp.id_polozka 
WHERE p.id IN (".implode(", ", $_SESSION['porovnani']).")
ORDER BY polozka DESC;


Jde mi teď o to seřazení (hodnota za tím ORDER BY).
Potřebovala bych totiž, aby to ty vybrané produkty řadilo v tom pořadí, ve kterém jsou v URL.

Nevěděl by někdo, jak na to?

Mockrát děkuju.
bohyn
Profil
...
ORDER BY CASE id_produkt
WHEN 24 THEN (SELECT 1)
WHEN 21 THEN (SELECT 2)
WHEN 30 THEN (SELECT 3)
WHEN 26 THEN (SELECT 4)
END
Stepanka
Profil *
bohyn
Děkuji za odpověď, ale nešlo by to ještě nějak obecněji? Porovnávané produkty jsou pokaždé jiné, URL může mít tvar http://eshop1.cz/porovnani.html?id=18,12,30,87
Stepanka
Profil *
A nebo může mít URL i tvar
http://eshop1.cz/porovnani.html?id=24,21,30,26, 13, 1, 87

nebo
http://eshop1.cz/porovnani.html?id=24,18

atd..
bohyn
Profil
Stepanka
Doufal sem to uz si das nejak dohromady :)

$ids = explode(",", $_GET['id']);

$query = "
...
ORDER BY CASE id_produkt
WHEN ".$ids[0]." THEN (SELECT 1)
WHEN ".$ids[1]." THEN (SELECT 2)
WHEN ".$ids[2]." THEN (SELECT 3)
WHEN ".$ids[3]." THEN (SELECT 4)
END";
Kajman_
Profil *
Co zkusit něco jako
order by find_in_set(p.id,'$_GET[id]')
bohyn
Profil
Stepanka
Pokud je pocet promenych promenny bude treba pouzit cykl

$ids = explode(",", $_GET['id']);

$query = "...
ORDER BY CASE id_produkt";

for($i = 0; $i < count($ids); $i++) {
  $query .= "WHEN ".$ids[$i]." THEN (SELECT ".$i.")\n";
}
$query .= "END";
Stepanka
Profil *
bohyn
Jo, promiň, máš pravdu, že už jsem si to mohla dát dohromady sama. Moc děkuju za návrh řešení, ale...
Kajman_ovo
řešení je naprosto ideální :-)
Děkuju za něho.
bohyn
Profil
Stepanka + Kajman_

Kdyz bude
http://eshop1.cz/porovnani.html?id=124,30,26, 13, 1, 87,12

Tak to 12 zaradi pravdepodobne na prvni misto
Kajman_
Profil *
bohyn
Kdepak, viz.
select find_in_set(12,'124,30,26, 13, 1, 87,12')
Toto téma je uzamčeno. Odpověď nelze zaslat.

0