Erre mi lehet a jó megoldás SQL-ben?
Egy webshop adatbázisában szerepel két tábla:
-termekek(id,nev,leiras)
-tulajdonsagok(termek_id,tulajdonsag)
Kereső mezőbe ha beír a felhasználó egy kifejezést, akkor dobja fel azokat a termékeket amik tartalmazzák az adott kifejezést bármelyik mezőben.
Én így csináltam: SELECT * FROM termekek INNER JOIN tulajdonsagok ON termekek.id = tulajdonsagok.termek_id WHERE termekek.nev = "kifejezés" OR termekek.leiras = "kifejezés" OR tulajdonsagok.tulajdonsag = "kifejezés"
Működik is, viszont ha az adott kifejezés szerepel a leírásban, akkor annyiszor felhozza rekordként az adott terméket ahány tulajdonság hozzá van rendelve a másik táblában.
Mi lehet erre a jó megoldás?
Az általad leírt SQL lekérdezésben a probléma az, hogy az INNER JOIN miatt minden olyan tulajdonság rekordot is visszaad, ami egy adott termékhez tartozik. Ennek következtében ha egy terméknek több tulajdonsága is van, akkor az adatbázis többször is visszaadja azt a terméket.
A megoldás lehet, hogy a termékek táblát és a tulajdonságok táblát külön-külön kérdezd le, és utána az eredményeket egyesítsd.
SELECT * FROM termekek WHERE termekek.nev = "kifejezés" OR termekek.leiras = "kifejezés"
UNION
SELECT termekek.* FROM termekek INNER JOIN tulajdonsagok ON termekek.id = tulajdonsagok.termek_id WHERE tulajdonsagok.tulajdonsag = "kifejezés"
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!