Autor | Zpráva | ||
---|---|---|---|
iceover Profil * |
#1 · Zasláno: 16. 6. 2011, 16:55:27
Už si nevím rady. Budu rád za každou odpověď.
Problém je v tom, že potřebuji porovnat data poslaná z formuláře ve tvaru: hodnota1,hodnota2,hodnota3...hodnotaN s hodnotami v MySQL hodnota1,hodnota2,hodnota3...hodnotaN Tak, aby to vrátilo ty řádky, kde se budou hodnoty shodovat (průnik hodnot). Datový formát SET nelze použít, protože hodnot je více než tento formát zvládne. SELECT * FROM cv2, cv5, cv6 WHERE cv2.id_cv = cv5.id_cv AND cv2.id_cv = cv6.id_cv AND '1,2,3,4,5,6' REGEXP cv2.nej_vzdelani LIMIT 0 , 30 Tento kód funguje správně, ale jen pokud cv2.nej_vzdelani se bude rovnat pouze jedné číselné hodnotě. Pokud bych chtěl porovnávat více číselných hodnot tak to nepůjde. A o to mi právě jde. Aby to bylo možné. |
||
ShiraNai7 Profil |
#2 · Zasláno: 16. 6. 2011, 17:07:33
Špatný návrh databáze.
|
||
iceover Profil * |
#3 · Zasláno: 16. 6. 2011, 17:23:01
A jak by byl lepší návrh databáze? I kdybych vytvořil tabulku okresy (id a název) a tu bych poté porovnával s hodnotami z formuláře tak, jak by potom vypadal sql dotaz, který by to dokázal porovnat?
|
||
ShiraNai7 Profil |
#4 · Zasláno: 16. 6. 2011, 17:26:43
SELECT sloupce FROM tabulka WHERE sloupec IN(1,2,3,4,5) AND dalsi podminky.. |
||
iceover Profil * |
#5 · Zasláno: 16. 6. 2011, 18:39:47
Asi jsem už úplně blbej, ale já si to furt nedokážu nějak představit.
TABULKA cv: -- -- Struktura tabulky `cv` -- CREATE TABLE `cv` ( `id_cv` mediumint(8) NOT NULL auto_increment, `obory` text NOT NULL, PRIMARY KEY (`id_cv`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; -- -- Vypisuji data pro tabulku `cv` -- INSERT INTO `cv` (`id_cv`, `obory`) VALUES (1, '1,3,5,7'), (2, '1,2,3,4'), (3, '5,6,7,8'), (4, '3,4,5,6'); TABULKA obory: -- -- Struktura tabulky `obory` -- CREATE TABLE `obory` ( `id` int(2) NOT NULL default '0', `nazev` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Vypisuji data pro tabulku `obory` -- INSERT INTO `obory` (`id`, `nazev`) VALUES (1, 'Administrativa'), (2, 'Logistika a doprava'), (3, 'Bankovnictví, finanční služby'), (4, 'Telekomunikace'), (5, 'Právo'), (6, 'Kultura, umění a tvůrčí práce'), (7, 'Management'), (8, 'Obchod'), (9, 'Obrana a ochrana'), (10, 'Stavebnictví a reality'), (11, 'Věda a výzkum'), (12, 'Výchova a vzdělávání'), (13, 'Výroba a provoz'), (14, 'Služby'), (15, 'Zdravotnictví'), (16, 'Zemědělství a lesnictví'), (17, 'Ostatní'), (18, 'Farmacie'), (19, 'Chemie a potravinářství'), (20, 'Kvalita a kontrola jakosti'), (21, 'Marketing'), (22, 'Média, reklama a PR'), (23, 'Nákup'), (24, 'Personalistika a lidské zdroje'), (25, 'Státní a veřejná správa'); Když to zjednoduším a budu mít tabulku cv a obory a budu chtít zobrazit řádky kde jsou v cv.obory hodnoty 3 a 4 tak to přes IN(3,4) stejně nebude fungovat. Jedině vytvořit novou tabulku kde by bylo tolik sloupců, kolik je možných hodnot a ty pak porovnávat nebo já už nevím. Prostě jsem nepochopil, jak si to myslel. Mohl by si mi prosím tě poslat sql dotaz, který by to v tomto případě dokázal a nebo tabulku navrženou pro tento případ tak, aby WHERE obory IN(3,4), vyhodilo řádky s id_cv = 2 a 4 ? |
||
Tori Profil |
#6 · Zasláno: 16. 6. 2011, 20:44:36 · Upravil/a: Tori
Jestli správně chápu, tak je to vztah M:N (teda jedno id_cv může být spojené s několika id_obor, a jedno id_obor může být spojené s několika id_cv). Bych to řešila jako vazební tabulku mezi cv a obory, ve které bude jen id_cv a id_oboru.
-- Místo tohoto: id_cv | id_oboru 1 | "1,2,3,4" -- bude tohle: 1 | 1 1 | 2 1 | 3 1 | 4 |
||
Časová prodleva: 13 let
|
0