Autor Zpráva
iceover
Profil *
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
Špatný návrh databáze.
iceover
Profil *
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
SELECT sloupce FROM tabulka WHERE sloupec IN(1,2,3,4,5) AND dalsi podminky..
iceover
Profil *
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
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

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