ugrás a tartalomhoz

Lekérdezés egyszerűsítése LIKE-al?

Hamilton · 2007. Már. 24. (Szo), 12.58
Üdv!

Egy lekérdezéssel kapcsolatban szeretném a véleményeteket kérni.
Van modjuk egy auto adatbázis abban szeretnék bizonyos feltételek szerint keresni.

Az auto extrái külön mezők, 1 ha van, 0 ha nincs.

pl.: ... WHERE legkondi = '1' AND eablak = '1' AND szervo = '1'

Ehelyett csinálok egy flags nevű mezőt aminek első karaktere a légkondi,
második az ablak, harmadik a szervo, stb. és szintén 1 ha van 0 ha nincs.

Akkor ha légkondi és szervó kell a lekérdezés:
WHERE flags LIKE '1_1'

VAGY kapcsolatnál ugyan kicsit fura:
WHERE flags LIKE '1__' OR flags LIKE '__1'
de ilyen ritkán fordul elő.

Saját méréseim szerint nincs különbség a lekérdezés sebességében a két módszer között, van valakinek tapasztalata?

Főleg ha több ilyen feltétel van, milyen módszert célszerű alkalmazni?
 
1

Egy mező egy adat

Ajnasz · 2007. Már. 24. (Szo), 13.39
Egy mezőben nem célszerű több adatot tárolni. Később csak problémáid lesznek abból, hogy most néhány and helyett egy ilyen megoldást használsz.
2

nem jó

Szekeres Gergő · 2007. Már. 24. (Szo), 13.39
Ez így nem jó. Legalábbis nem hatékony, illetve ha még lesz 1000 extra, mert az új S osztályt rakjafel valaki, akkor lesz egy 600 karakteres valamit, amin más senki nem fog kiigazodni. Csinálj külön mezőket, hisz erre vannak. Attól függően, hogy hova használod érdemes azon is elgondolkozni, hogy külön rakod 3 táblába:

autók
----
id
típus
stb

extrak
-----
légkondi
el_ablak
esp
stb

autok_extrak
------
autokid
extrakid

Az autok extrákban csak összerendeled a két táblát. Még az extrák táblát ki lehet egészíteni egy 'weight' tinyint mezővel, aholva az 'order by' paramétert adod meg.

Én biztos így csinálnám, egyszerübb lenne a késöbbi módosítás-törlés-felvétel is, mint folyton updatelni egy 100 mezőből álló táblát.
3

A Like Stringre való

Csiszár Attila · 2007. Már. 24. (Szo), 13.51
A LIKE-ot stringre szokták(kell) használni.

De azt hiszem a te esetedben inkább elvi hiba van. Adatbázisoknál az egyik alapszabály, hogy mező nem tartalmazhat több adatot( értsd adat-struktúrát). Ilyenkor több táblára kell bontani az adott táblát.

A te esetedben például egy auto es extra tábla kellene, az extrába kerülnének a 'legkondi', 'eablak' stb. mezők. Mindegyik rekordnak lenne egy azonosítója, ami az auto-k táblába kerülne a megfelelő rekordhoz, tulajdonképpen ez kapcsolja össze a két táblát és a lekérdezéskor így kell eljárni:

...WHERE extra.extra_azon = auto.extra_azon
Szerintem nézz át pár adatbázis létrehozás alapjaival foglalkozó könyvet, írást stb. és akkor jobban megérted miért van szükség ezekre.
4

megoldások

Hamilton · 2007. Már. 25. (V), 12.22
Köszönöm a tanácsokat!