Autor | Zpráva | ||
---|---|---|---|
Honza.P@ Profil |
#1 · Zasláno: 15. 2. 2012, 17:10:03
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 |
#2 · Zasláno: 15. 2. 2012, 17:22:13
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 |
#3 · Zasláno: 15. 2. 2012, 17:58:21
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 |
#4 · Zasláno: 15. 2. 2012, 18:16:03
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 |
#5 · Zasláno: 15. 2. 2012, 21:09:50
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 |
#6 · Zasláno: 16. 2. 2012, 19:31:18
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.
|
||
Časová prodleva: 11 let
|
0