Autor Zpráva
siginigin
Profil *
zdravim, narazil som na mensi problem: mam asi 80 poli v tabulke a chcem vybrat do vysledku tie stlpce, v ktorych zaznamy obsahuju urcitu zadanu hodnotu, asi nejak takto:
select stlpce from tabulka where stlpce like "%text%"

ak hodnota v niektorom stlpci obsahuje %text% tak tieto stlpce budu vo vysledku. takto rucne
$q = mysql_query ("select stlpec1 from tabulka where stlpec1 like "%text%"");
if (mysql_num_rows($q) > 0){
  // spracuj stlpec1
}
$q = mysql_query ("select stlpec2 from tabulka where stlpec2 like "%text%"");
if (mysql_num_rows($q) > 0){
  // spracuj stlpec2
}

// takto spracuj dalsich 78 stlpcov

$q = mysql_query ("select stlpec80 from tabulka where stlpec80 like "%text%"");
if (mysql_num_rows($q) > 0){
  // spracuj stlpec80
}

mi to pride dost neefektivne, najma ked sa pocet stlpcov moze menit v buducnosti.
nazvy stlpcov su rozne a neda sa na ne pouzit ani cyklus na zjednodusenie aspon php skriptu, ked uz nie objemu zataze mysql servera.

velka vdaka za radu.
Alphard
Profil
Není ta tabulka špatně navržená? Je v souladu s normalizačními pravidly?

V současném stavu těžko radit. Nezdá se mi normální hledat stejnou hodnotu v 80 sloupcích. Možná sestavit dotaz ve stylu like OR like a pak v aplikaci přebrat sloupce.
SELECT * FROM `tabulka` WHERE (`sloupec1` LIKE '%ahoj%' OR `sloupec2` LIKE '%ahoj%' OR `sloupec3` LIKE '%ahoj%')
siginigin
Profil *
nuz nepoznam normalizacne pravidla, ale stlpce su typu varchar(200). jedna sa o zoznam pc a ich parametrov. cielom je aby som si mohol vyhladat napriklad vsetky pc , ktore maju pod 128MB ram a k tomu niekde na boku tabulky budem mat zobrazeny vyhladavaci formular. v nom budu vypisane polia a ku kazdemu polu bude pozgrupovane hodnoty z tohto pola. napr.
select Memory from tabulka group by Memory

vysledkom coho bude vo vyhladavacom formulari:
RAM
128MB
256MB
1GB
...
pomocou ajaxu potom mozem kliknutim na niektoru polozku doplnit kriteria do vyhladavania. tento system funguje aj v niektorych internetovych obchodoch napr. tu - kriteria vyhladavania si mozem pridavat a odoberat podla lubovole. je to v podstate aj napoveda, ked neviem co hladam.
Keeehi
Profil
siginigin:
Potom použij co napsal Alphard. Jen s jednou úpravou: OR -> nahraď za AND pokud výsledek má splňovat všechny zadané parametry.
siginigin
Profil *
Alphard to napisal dobre, s pouzitim OR budu vo vysledku tie zaznamy, ktore potrebujem. akurat ze tam bude vsetkych 80 stlpcov, aj ked napriklad %text% sa bude nachadzat len v zaznamoch v stlpci 15, 24, 56. ja by som chcel prave len tieto tri. nechcem davat do vyhladavacieho formulara vsetkych 80 parametrov, ked sa v nich hladany vyraz nenachadza a tiez ze ten formular by bol pekne dlhy, ak v nom budu vsetky stlpce...

jedna sa mi len o naplnenie vyhladavacieho formulara vhodnymi poliami = kriteriami a to tak aby som nemusel prehladavat kazde jedno pole a kontrolovat ci neobsahuje hladany vyraz.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0