Autor Zpráva
Honza.P@
Profil
Mám tabulku:

DROP TABLE IF EXISTS `cars`;
CREATE TABLE `cars` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` tinytext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `cars` (`id`, `name`) VALUES
(1,    'bmw'),
(2,    'ford'),
(3,    'seat');

DROP TABLE IF EXISTS `cars_data`;
CREATE TABLE `cars_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pos_1` int(11) NOT NULL,
  `pos_2` int(11) NOT NULL,
  `pos_3` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `cars_data` (`id`, `pos_1`, `pos_2`, `pos_3`) VALUES
(1,    2,    3,    2);

Potřeboval bych dát dohromady dotaz, tak aby se name přiřadilo k pos_N

Něco jako:
Select * from cars_data D left join cars C on C.id = D.pos_N

Jenže to by v tomto případě znameno udělat dotaz 3x.
Tori
Profil
To pos_1 - pos_3 je nějaké pořadí? Nebylo by potom lepší mít sloupce group_id (INT), car_id (INT), order (TINYINT UNSIGNED) a uložit data takhle:
1 | 2 | 1
1 | 3 | 2
1 | 2 | 3
Honza.P@
Profil
Každý uživatel má pole (v db pos_1 ...) a na ně si přiřadí nějaké to auto, takže nevim, jestli by to šlo takto.
Tori
Profil
Co když se časem rozhodnete, že VIP uživatelé můžou mít 5 aut? Pořád se mi ten návrh DB nelíbí, ale nechám to zkušenějším, třeba to jde nějakým elegantním dotazem i takto.
Honza.P@
Profil
Tori: To v plánu určitě nebude :)
Tohle řešení mě taky napadlo, ale kdybych to mohl vyřešit nějak tato, tak bych to měl lehčí, ač to tak nevypadá :)
Honza.P@
Profil
Kdybych to uložil do jiné tabulky, tak mi vznikne jiný problém. Budu je muset sloučit pomocí Group_concat(). Jenže já potřebuji pracovat s každou zvlášt.

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: