Задавайте вопросы, мы ответим
Вы не зашли.
Есть 2 связанные таблицы. Links и их Titles. Связаны между собой ключом `id` = `link_id`. Необходимо из titles выбирать первый подходящий результат в определённой последовательности кодов.
`links`
----------------------------------------
`id` | `url` | `active`
'1' | 'http://localhost/' | '1'
'2' | 'http://another.url' | '1'
======================
`titles`
---------------------------------------
`link_id` | `title` | `code`
'1' | 'локалхост' | '12'
'2' | 'другой.урл' | '12'
'2' | 'another.url' | '24'
'1' | 'locallos' | '6'
=====================
Суть ситуации такова:
Необходимо при нахождении title'а с `code` = 24 выбрать только его данные, и только в случае его отсутствия искать `code` = 6, а потом `code` = 12.
В итоге должно получиться только 2 элемента. `link_id` = 1 && `code` = 6 (так как не существует элемента с `code` = 24) и `link_id` = 2 && `code` = 24.
Оба `title` с кодом 12 не выбираются, так как существуют элементы с кодами 24 и 6.
Неудавшаяся попытка:
Отредактированно test (03.06.2010 12:15:20)
Неактивен
Вопрос частично решён:
Отредактированно test (03.06.2010 15:51:44)
Неактивен
Я бы сказал, что подзапрос лишний. Достаточно объединения таблиц + ORDER + LIMIT.
Неактивен
Вытянута только часть столбцов для примера, обе таблицы значительно больше, и объединение их повлечёт только увеличение дублирующихся данных.
Неактивен
То есть Вы считаете, что лишний подзапрос упростит конструкцию в целом?
Неактивен
Если имели ввиду под "объединить таблицы" - слияние 2х таблиц в одну, то в таком случае конструкция будет куда проще, но тогда страдает место на жёстких дисках, причём значительно.
Если же вы имели ввиду JOIN'ы или UNION'ы, то буду благодарен за совет по оптимизации.
Неактивен
Вы, наверное, что-то такое хотите?
SELECT * FROM links, titles
WHERE active = 1
AND ( `code` = '24' OR `code` = '6' OR `code` = '12' )
AND id = link_id
ORDER BY FIELD ( `code`, '24', '6', '12' );
Неактивен