[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подскажите запрос.
vital
Суть. Есть табличка со статьями. В ней есть колонка lang=set('en','de',...'gb')
Задача.
Получить статью на переданном языке, или естли нету на переданном то на английском.
Двумя запросами все просто.

SELECT text FROM Articles WHERE title=:title AND lang=:lang

Если нету
SELECT text FROM Articles WHERE title=:title AND lang='en'


А как одним?
ПС.
Mysql офк



Спустя 14 минут, 40 секунд (15.10.2010 - 16:33) arvitaly написал(а):
SELECT text FROM Articles WHERE title=:title AND (lang=:lang or lang='en')

Спустя 4 часа, 5 минут, 46 секунд (15.10.2010 - 20:39) sergeiss написал(а):
arvitaly - не совсем корректно получается у тебя логика. При наличии на каком-то языке выберет 2 записи: на этом языке и на английском.

В логике надо указать (словами опишу smile.gif)
where .... (язык равен выбранному и выбранный язык не пустой) или (английский язык и выбранный язык пустой)

Спустя 12 часов, 7 секунд (16.10.2010 - 08:39) Michael написал(а):
SELECT IFNULL(a2.text, a1.text)
FROM Articles a1
LEFT JOIN
(SELECT * FROM Articles WHERE lang='ru') a2 ON a1.title = a2.title
WHERE a1.title='savage'
AND a1.lang='en'


- для примера - :lang = 'ru', :title = 'savage'

Спустя 2 дня, 9 часов, 22 минуты, 18 секунд (18.10.2010 - 18:01) Guest написал(а):
Цитата
для примера - :lang = 'ru', :title = 'savage'

ВСегда возвращает англ вариант.

Спустя 14 часов, 8 минут, 55 секунд (19.10.2010 - 08:10) Michael написал(а):
Я у себя проверял - все правильно там возвращается. Понял что там так будет: WHERE lang=:lang ?
У меня такая табличка:
user posted image
при ua выдаст дикість

Спустя 6 часов, 18 минут, 59 секунд (19.10.2010 - 14:29) vital написал(а):
Вернее нет, спасибо запрос работает. А как его модифицировать что бы выбрать все поля их базы а не только текст?

Спустя 2 минуты, 58 секунд (19.10.2010 - 14:32) Michael написал(а):
SELECT IFNULL(a2.text, a1.text) as mytext, a1.pole2, a1.pole3, ...

или просто a1.*

Спустя 22 минуты, 44 секунды (19.10.2010 - 14:55) vital написал(а):
Нет. просто a1.* выдаст ошибку. Я пробовал) А вот про перечисление полей после запятой.. Я просто поля ставил, не додумался до a1. Мда.. Окончательно вышло так.
SELECT a1.id, a1.title, IFNULL(a2.lang, a1.lang) as lang, IFNULL(a2.text, a1.text) as text
FROM Articles a1
LEFT JOIN
(SELECT * FROM Articles WHERE lang=:lng) a2 ON a1.title = a2.title
WHERE a1.title=:title AND a1.lang='en'

Спустя 1 час, 26 минут, 48 секунд (19.10.2010 - 16:22) Guest написал(а):
1) сделать lang не SET, a ENUM
2) SELECT text FROM Articles WHERE title=:title AND (lang=:lang or lang='en') ORDER BY lang LIMIT 0 , 1

Спустя 50 секунд (19.10.2010 - 16:23) Guest написал(а):
сорри, ошибся малек. конечно же

ORDER BY lang DESC

Спустя 1 час, 6 минут, 7 секунд (19.10.2010 - 17:29) vital написал(а):
SELECT * FROM Articles WHERE title=:title AND (lang=:lng or lang='en') ORDER BY lang DESC LIMIT 0,1

ЧЕЕЕЕЕРТТТ! Как, ну вот как я мог забыть про лимит??? спс большое.

Спустя 14 часов, 37 минут, 38 секунд (20.10.2010 - 08:06) Michael написал(а):
vital, а ты тип менял на ENUM или с SET тоже так сортирует?


_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.