Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
37926



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |