Autor | Zpráva | ||
---|---|---|---|
Stepanka Profil * |
#1 · Zasláno: 30. 12. 2008, 16:59:07
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 |
#2 · Zasláno: 30. 12. 2008, 17:54:41
... 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 * |
#3 · Zasláno: 30. 12. 2008, 17:58:20
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 * |
#4 · Zasláno: 30. 12. 2008, 18:04:06
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 |
#5 · Zasláno: 30. 12. 2008, 18:07:10
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 * |
#6 · Zasláno: 30. 12. 2008, 18:07:13
Co zkusit něco jako
order by find_in_set(p.id,'$_GET[id]') |
||
bohyn Profil |
#7 · Zasláno: 30. 12. 2008, 18:09:50
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 * |
#8 · Zasláno: 30. 12. 2008, 18:16:48
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 |
#9 · Zasláno: 30. 12. 2008, 18:31:02
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 * |
#10 · Zasláno: 30. 12. 2008, 19:15:15
bohyn
Kdepak, viz. select find_in_set(12,'124,30,26, 13, 1, 87,12') |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0