[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Приоритет условий WHERE
rooor
Приветствую.
На мультиязычном сайте нужно вывести статьи согласно выбранного языка, но если в базе нет статьи с таким языком - нужно выбрать с дефолтовым
Собственно вопрос: какова вероятность срабатывания второго условия в запросе?
может ли получится так, что при наличии статьи с выбранным языком выберется с дефолтовым?
...WHERE `id` = 10 AND (`lang` = '". $lang ."' OR `lang` = 'ru')


ну или вообще как ещё можно это организовать?
vagrand
Предъявите структуры таблиц

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
bestxp
в твоем варианте выберутся от 1 если она всего одна на ru или выбранном языке
и 2 если статьи есть на обоих языках
rooor
vagrand
да самая простая)
ну например:
id | id_cat | lang | text

id - int
id_cat - int
lang - ENUM('en','ru')
text - text

и тогда запрос:
...WHERE `id_cat` = 10 AND (`lang` = '". $lang ."' OR `lang` = 'ru')
sergeiss
Цитата (rooor @ 22.10.2014 - 10:48)
может ли получится так, что при наличии статьи с выбранным языком выберется с дефолтовым?

Да, может.

Чтобы гарантированно выбирать с определенным языком, при наличии такой статьи, нужно иметь четкий порядок. В случае использования условия OR однозначности нет. Поэтому может быть выбрана статься с любым из языков (при сохранении структуры запроса).

Твоя задача, это сделать эту самую однозначность. Вот насчет средств, тут подумать надо. Опять же, зависит от того, выбираешь ты только одну статью или несколько сразу и у каждой своя специфика.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
vagrand
rooor
Цитата
да самая простая)


А речь идет об одной и той жен статье но на разных языках? Или речь идет о разных?

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
rooor
ну по факту получается что это 2 записи в таблице
у первой поле lang == ru, у второй - en

статья выбирается по определенным параметрам, остается загвоздка в выборе языка
если пользователь выбрал en, но в базе такой статьи нет, то надо ему показать ru
kaww
rooor
ORDER BY FIELD(lang, 'en', 'ru')
http://dev.mysql.com/doc/refman/5.1/en/str...#function_field
S.Chushkin
Цитата (rooor @ 22.10.2014 - 10:48)
Приветствую.
На мультиязычном сайте нужно вывести статьи согласно выбранного языка, но если в базе нет статьи с таким языком - нужно выбрать с дефолтовым
Собственно вопрос: какова вероятность срабатывания второго условия в запросе?
может ли получится так, что при наличии статьи с выбранным языком выберется с дефолтовым?
...WHERE `id` = 10 AND (`lang` = '". $lang ."' OR `lang` = 'ru')


ну или вообще как ещё можно это организовать?

1) Условия в WHERE обрабатываются как придётся (зависит от оптимизатора). Т.е. гарантии порядка нет.
2) Если MySQL, то в нём выборка с приоритетом это бооольшая проблема. :(
В общем случае, решается через подзапрос с использованием функций (FIELD() etc).

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

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