Autor Zpráva
pat
Profil *
Dobrý den, chci se zeptat jak udělat aby dotaz vypsal pouze nalezené záznamy. Mám tabulku ve které mám 2,7,4,66,93
Jak nejlépě docílit když zadam třeba 4 aby vypsal vyhledal jen to? Snažím se o to tímhle dotazem, ale nějak mi na to prdí. Děkuju

$quer = "SELECT * FROM product WHERE MATCH(id_parameter) AGAINST ('4' IN BOOLEAN MODE)";
kuba1999
Profil
co napsat:
$quer = "SELECT * FROM product WHERE id_parameter='4' ";
pat
Profil *
Ve sloupci id_parameter je vypsáno tohle: 2,7,4,66,93
Tak klasickym porovnáním to nepůjde. Jsem problém popsal blbě, ale moc děkuju za radu.
panther
Profil
pat:
Ve sloupci id_parameter je vypsáno tohle: 2,7,4,66,93
máš špatně navrženou strukturu tabulek v DB. Pokud je více než jeden záznam ve sloupci v tabulce, je něco špatně.
pat
Profil *
Takhle nějak vypadá moje tabulka:
INSERT INTO `product` (`id_product`, `id_parameter`, `name_product`, `price`) VALUES 
(120, '2,7,4,66,93', 'Raft', 1200);
pat
Profil *
Je to tak u úmyslně dělaný, ale ted mám jen problém s vyhledávačem jinak jak to je mi 100% vyhovuje.
Alphard
Profil
Tohle nechcete slyšet, ale návrh této databázové struktury je na dvě věci. Parametry patří do samostatné tabulky. Teď máte problém s jednoduchým výběrem, už jste se zamyslel, jak bude vypadat třeba update?
pat
Profil *
jj, zamyslel update ten je hotovej, ale jedinej problém je vyhledávání. Vím, že to neni moc elegantní řešení, ale zhlediska šetření místa v db to je dobré.
Dante85
Profil *
SELECT * FROM product WHERE id_parameter LIKE '%4%'


Možná ...
Alphard
Profil
[#8] Když myslíte...
Vyhledávání je problém. Fungovalo by třeba like '%4%', jen to vezme i 24. Když to obalíte čárkami, budou problémem krajní hodnoty like '%,4,%'. Nenapadá mě nic jiného než regulár nebo vlastní funkce, která to rozseká a porovná. Rychlé to ale nebude v žádném případě.
pat
Profil *
LIKE jsem taky testoval, ale neuspěšně. Vypisuje i produkty, které mají prázdné pole v id_parameter
panther
Profil
pat:
aspoň vidíš, jak moc špatně máš návrh DB. Poradit si nenecháš, asi máš smůlu.

Když jsme u toho, like uvedený v [#10] nemohl vrátit i prázdný řádek.
pat
Profil *
Měl jsem chybu v podmínce už to maká pěkně. Jen se chci zeptat na to jak mě celou dobu upozornujete na výsledky. Ví někdo jak to udělat aby při vyhledání 2 se zobrazil jen produkty které mají 2 a třeba 28 ignoroval?
panther
Profil
pat:
v [#10] se o tom Alphard zmiňoval. Vidíš, už tu jsou problémy související s návrhem DB, na který tě celou dobu upozorňujeme. Jednoduchý select a už jsou problémy.
pat
Profil *
A jak by ten regulár měl vypadat? Děkuju
panther
Profil
pat:
za těch 7 minut, než jsi na mě zareagoval, jsi se o ten regulár ani nepokusil. Nejprve zkus projevit trochu vlastní iniciativy.
pat
Profil *
testuju to funkcí preg_replace, ale to neni dobrá cesta
sysel
Profil
`id_parameter` .... ',2,7,4,66,93,' 
čili seznam musí začínat i končit čárkou, pak lze testovat
like '%,x,%'

nicméně i já se přidávám na stranu těch, co přednostně radí vymyslet lepší strukturu tabulek. Asi Tě nepřesvědčíme, ale je to rozhodně správnější postup.
pat
Profil *
Může být takhle?
id_parameter LIKE '%".str_replace(" ", ", ", $velikost)."%'

Já si toho vážim, že mi tak dobře radíte a já Vím, že máte pravdu, ale já to jinak udšlat ani nemůžu.
pat
Profil *
Prosim, poradte mi nekdo, furt mi to nefacha at dělám co chci.
echo preg_replace("" ",", "2,5,7");
sysel
Profil
Božínku, umíte číst? Pokud budete mít řetězec parametrů ve sloupci id_parameter opatřený na začátku i na konci čárkou, vystačíte si i bez regexpu. Prostě potřebujete mít delimiter (je jedno zda čárku či dvojtečku nebo svislítko) na obou koncích hledaného výrazu, tedy v případě, že v id_parameter bude řetězec: ',2,22,24,221,222,' podmínka
WHERE id_parameter like '%,2,%'
najde dvojku, ale ne 24
WHERE id_parameter like '%,22,%'
najde dvaadvacítku, ale ne 221
WHERE id_parameter like '%,222,%'
najde dvěstědvacetdvojku
Jednoduchá řešení mají obvykle nejlepší výsledky

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: