Задача.
Получить статью на переданном языке, или естли нету на переданном то на английском.
Двумя запросами все просто.
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 записи: на этом языке и на английском.
В логике надо указать (словами опишу )
В логике надо указать (словами опишу )
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 ?
У меня такая табличка:
при ua выдаст дикість
У меня такая табличка:
при 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
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
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