|
|
|
|
|
для: Trianon
(17.02.2010 в 01:19)
| | > Я с ним не согласился. Ну просто потому, что это как бы неправильно :)
Собственно, об этом и речь... )) | |
|
|
|
|
|
|
|
для: Meh
(16.02.2010 в 23:50)
| | >Так... Тогда, помогите разобраться до конца.
>
>EXPLAIN выдаёт совершенно одинаковые результаты как при наличии отдельных ключей KEY `modid` и KEY `servid` в таблице `models_servers`, так и при отсутствии любого из них.
>Как же понять, нужны они или нет?
Для приведеного Вами запроса - конечно же достаточно составного ключа.
Либо просто ключа modid
Но если Вы попробуете переделать, к примеру, порядок на ORDER BY m.servid (при фиксированном modid) - EXPLAIN тут же выскажет Вам фе.
>
>----
>2Trianon. Читая ваши посты на форуме, не перестаю удевляться вашей способности видеть "невидимое"...
Не понял.
Прозвучало предположение , что составной ключ на двух полях эквивалентен двум простым ключам (или как минимум обеспечивает функциональность двух простых ключей)
Я с ним не согласился. Ну просто потому, что это как бы неправильно :) | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2010 в 22:59)
| | Так... Тогда, помогите разобраться до конца.
EXPLAIN выдаёт совершенно одинаковые результаты как при наличии отдельных ключей KEY `modid` и KEY `servid` в таблице `models_servers`, так и при отсутствии любого из них.
Как же понять, нужны они или нет?
----
2Trianon. Читая ваши посты на форуме, не перестаю удевляться вашей способности видеть "невидимое"... | |
|
|
|
|
|
|
|
для: Лена
(16.02.2010 в 10:38)
| | > PRIMARY KEY (`modid`,`servid`),
>KEY `modid` (`modid`),
>KEY `servid` (`servid`)
>У нас составной первичный ключ. Зачем отдельно устанавливать ключи для modid и servid?
Готов разделить удивление по вопросу ключа modid.
Но никак не servid. | |
|
|
|
|
|
|
|
для: Лена
(16.02.2010 в 10:38)
| | Спасибо за запрос. То, что нужно.
По ключам будем думать... | |
|
|
|
|
|
|
|
для: Meh
(16.02.2010 в 01:36)
| |
SELECT m.modid, m.name, ms.opt1
FROM models m
LEFT JOIN models_servers ms ON m.modid = ms.modid
AND ms.servid =12
ORDER BY m.modid
|
В таблице models_servers не поняла вот этого:
PRIMARY KEY (`modid`,`servid`),
KEY `modid` (`modid`),
KEY `servid` (`servid`)
У нас составной первичный ключ. Зачем отдельно устанавливать ключи для modid и servid? | |
|
|
|
|
|
|
|
для: Meh
(16.02.2010 в 01:24)
| | Да, это нужно постараться, чтоб промучавшись 2 часа, найти решение через минуту после отправки вопроса на форум...
Проверьте уж тогда, может я не прав:
SELECT *
FROM (
SELECT M.`modid` , M.`name` , S.`servid`
FROM `models` M, `servers` S WHERE S.`servid` = 10
) A
LEFT JOIN `models_servers` MS ON A.`servid` = MS.`servid` AND A.`modid` = MS.`modid`
|
| |
|
|
|
|
|
|
| Добрый день.
Помогите с запросом из трёх таблиц: серверы, модели и опции для моделей, соответственно серверам.
CREATE TABLE `servers` (
`servid` tinyint(3) unsigned NOT NULL COMMENT 'ID сервера',
`name` varchar(255) NOT NULL COMMENT 'Название сервера',
PRIMARY KEY (`servid`)
);
INSERT INTO `servers` (`servid`, `name`) VALUES
(10, 'Сервер 10'),
(11, 'Сервер 11'),
(12, 'Сервер 12');
CREATE TABLE `models` (
`modid` int(11) unsigned NOT NULL,
`name` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`modid`)
);
INSERT INTO `models` (`modid`, `name`) VALUES
(1, 'Модель 1'),
(2, 'Модель 2'),
(3, 'Модель 3');
CREATE TABLE `models_servers` (
`modid` int(11) unsigned NOT NULL,
`servid` tinyint(3) unsigned NOT NULL,
`opt1` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT 'Опция 1',
PRIMARY KEY (`modid`,`servid`),
KEY `modid` (`modid`),
KEY `servid` (`servid`)
);
INSERT INTO `models_servers` (`modid`, `servid`, `opt1`) VALUES
(1, 10, 111),
(1, 11, 22),
(3, 12, 33);
|
На каких-то серверах опции для некоторых моделей могут быть не заданы.
Необходимо для сервера '10' получать результат:
modid name opt1
-------------------------
1 Модель 1 111
2 Модель 2 NULL
3 Модель 3 NULL
Для сервера '12':
modid name opt1
-------------------------
1 Модель 1 NULL
2 Модель 2 NULL
3 Модель 3 33
|
| |
|
|
|
|