|
MySQL.RU - Webboard
Вернуться
Выборка только по одному из двух условий (SLESH) 11/02/2011 - 19:39:36
From: SLESH - 11/02/2011 - 19:39:36
Subject:Выборка только по одному из двух условий
-----------------
Собственно говоря столкнулся с одной проблемкой, необходимо получить данные в один запрос.
Суть дела такова что есть 3 таблицы:
1) Soft - содержит имя софта и номер
* id INT PRIMARY KEY
* name VARCHAR(32)
2) Langs - содержит инфу о языке
* id INT PRIMARY KEY
* name VARCHAR(32) // имя языка
* main INT // главный или нет
если main = 1 значит язык является главным. main = 1 есть только у одного языка и всегда присутствует.
3) Info - содержит описание софта
* id INT PRIMARY KEY
* soft_id INT FOREIGN KEY REFERENCES Soft(id)
* lang_id INT FOREIGN KEY REFERENCES Langs(id)
* data TEXT
т.е. структура такая: Langs - список языков, Soft - список софта, Info - инфа о софте, на разных языках.
И вот основная проблема: необходимо выбрать данных из Info зная soft_id и lang_id, но если в таблице отсутствует описание для указанного lang_id, то брать описание для языка у которого main = 1.
И всё это необходимо провернуть в один запрос.
Пытался завернуть всё в хранимую процедуру, но результат чуть не тот получается. Да и желательно без хранимых процедур.
Единственное что смог придумать, так только:
SELECT * FROM `Info`
WHERE `soft_id` = НОМЕР_СОФТА AND
`lang_id`=НОМЕР_ЯЗЫКА
UNION SELECT `Info`.* FROM `Info`, `Langs`
WHERE `soft_id` = НОМЕР_СОФТА AND
`Info`.`lang_id`=`Langs`.`id` AND
`Langs`.`main`=1
LIMIT 1
Но мне кажется это решение более медленное, чем 3 простых последовательных запроса.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
37926
|
|