Autor | Zpráva | ||
---|---|---|---|
pat Profil * |
#1 · Zasláno: 10. 4. 2010, 19:51:20
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 |
#2 · Zasláno: 10. 4. 2010, 19:54:53 · Upravil/a: kuba1999
co napsat:
$quer = "SELECT * FROM product WHERE id_parameter='4' "; |
||
pat Profil * |
#3 · Zasláno: 10. 4. 2010, 19:58:51
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 |
#4 · Zasláno: 10. 4. 2010, 20:02:26
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 * |
#5 · Zasláno: 10. 4. 2010, 20:03:59
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 * |
#6 · Zasláno: 10. 4. 2010, 20:06:52
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 |
#7 · Zasláno: 10. 4. 2010, 20:07:10
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 * |
#8 · Zasláno: 10. 4. 2010, 20:09:33
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 * |
#9 · Zasláno: 10. 4. 2010, 20:18:55
SELECT * FROM product WHERE id_parameter LIKE '%4%' Možná ... |
||
Alphard Profil |
#10 · Zasláno: 10. 4. 2010, 20:19:37
[#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 * |
#11 · Zasláno: 10. 4. 2010, 20:23:40
LIKE jsem taky testoval, ale neuspěšně. Vypisuje i produkty, které mají prázdné pole v id_parameter
|
||
panther Profil |
#12 · Zasláno: 10. 4. 2010, 20:26:13
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 * |
#13 · Zasláno: 10. 4. 2010, 20:41:29
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 |
#14 · Zasláno: 10. 4. 2010, 20:56:42 · Upravil/a: panther
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 * |
#15 · Zasláno: 10. 4. 2010, 21:03:34
A jak by ten regulár měl vypadat? Děkuju
|
||
panther Profil |
#16 · Zasláno: 10. 4. 2010, 21:06:43
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 * |
#17 · Zasláno: 10. 4. 2010, 21:10:17
testuju to funkcí preg_replace, ale to neni dobrá cesta
|
||
sysel Profil |
#18 · Zasláno: 10. 4. 2010, 21:16:17
`id_parameter` .... ',2,7,4,66,93,' 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 * |
#19 · Zasláno: 10. 4. 2010, 21:18:07
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 * |
#20 · Zasláno: 10. 4. 2010, 21:42:43
Prosim, poradte mi nekdo, furt mi to nefacha at dělám co chci.
echo preg_replace("" ",", "2,5,7"); |
||
sysel Profil |
#21 · Zasláno: 11. 4. 2010, 00:22:33
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,%' WHERE id_parameter like '%,22,%' WHERE id_parameter like '%,222,%' Jednoduchá řešení mají obvykle nejlepší výsledky |
||
Časová prodleva: 14 let
|
0