ugrás a tartalomhoz

DB lekérdezésben egy PHP változó használata

norby1 · 2009. Aug. 5. (Sze), 10.01
Sziasztok! Segítségeteket szeretném kérni...
Készítek egy oldalt, amely elsősorban cikkeket tartalmaz. A cikkek adatbázisba vannak szedve, és mindegyiknek van egy "címke" mezője, ahol vesszővel elválasztva címkéket adok meg neki. A honlapon van egy "kereső form", és az ebből érkező keresendő szót a DB "címke" mezőjével hasonlítanám össze. Csakhogy a címke mezőben több szó is van vesszővel elválasztva. Egy olyan kifejezés kellene, hogy "ha a cimkék valamelyikével is megegyezik a keresendő szó, akkor azt listázza."

Konkrétan: "SELECT id FROM cikkek WHERE cimke='*.$list.*' ORDER BY minosites, id DESC"
a $list változó a keresendő szó. Gondoltam ha elé és utána írok egy *-ot, akkor talán jó, de nem... Előre is köszönöm a válaszokat!
 
1

like %

bonga · 2009. Aug. 5. (Sze), 10.22
Első nekifutásra talán így:
'SELECT id FROM cikkek WHERE cimke LIKE "%' . $list . '%" ORDER BY minosites, id DESC'
De ez a lekérdezés nem felel meg annak a feladatnak, hogy "ha a cimkék valamelyikével is megegyezik a keresendő szó, akkor azt listázza."
Ehhez a címkéket egy külön táblába kellene gyűjtened egyesével és egy további táblában tárolni, hogy melyik cikkhez milyen címkék tartoznak (feloldva az n:n kapcsolatot két 1:n kapcsolatra).
2

Sikerült

norby1 · 2009. Aug. 5. (Sze), 10.42
Először is hálásan köszönöm a segítséged. Úgy működik, ahogy azt szerettem volna. Valahogy minden programnyelvben kifognak rajtam ezek a szabályos kifejezések.
Mellesleg az előbb lehet nem jól fogalmaztam meg a "feladatot". Arra gondoltam, hogy annak a cikknek az ID-jét listázza ki, amelyiknél a cimkék valamelyikével is megegyezik a keresendő szó. Külön táblán gondolkodtam, de azért vetettem el az ötletet, mert így sokkal nagyobb a szabadság a cimke megadásánál, ahogy bővülni fognak a cikkek és ezáltal a hozzátartozó cimkék is.
3

jól működik...

bonga · 2009. Aug. 5. (Sze), 10.58
Igen, egészen addig jól működik, amíg a $list változóban egyetlen szó, vagy szórészlet szerepel. De mi van akkor, ha egy cikked címke mezője így néz ki: "tech, IT, computer" és valaki erre keres: "tech, computer"? A cikkedet nem fogja megtalálni. Tehát egyrészről nem ártana további vizsgálat alá vetni a $list változód tartalmát (pl. tutira ne legyen szóköz a $list változóban, vagy explode() a szóközökre és sql-ben VAGY kapcsolattal keresni az egyes szavakra), másrészről pedig ugye nem felejtetted el a user-től érkező adatok megfelelő kiértékelését (pl. real_escape_string())?