Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT и условия для WHERE / 6 сообщений из 6, страница 1 из 1
12.03.2015, 14:30:19
    #38902488
scruwi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT и условия для WHERE
заранее приношу извинения за нубские вопросы и кривизну проектирования БД )):
в одной таблице хранятся настройки для формы как общие для всех пользователей, так и специфические для конкретного:
Код: plaintext
1.
2.
3.
4.
5.
6.
id  user        param   value
------------------------------
1   default     p1      null
2   default     p2      null
3   default     p3      null
4   user1       p1      12345

нужно сделать выборку с условием:
если для 'user1' есть запись param='p1', то брать её. а если нет - то значение p1 берется из default.
сейчас выбираю из базы все записи
Код: plaintext
 SELECT id, user, param, value WHERE user='user1' or user='default'; 
а потом средствами php разбираюсь что оставить, а что выбросить. но хочу переложить проверку условия на БД. пытался прикрутить после WHERE CASE id .. или IF..THEN пока не понял что при таком подходе нужно где-то хранить флаг, встречалось это имя параметра ранее в выборке или нет.

и второй насущный вопрос: есть ли для изучения поведения операторов какой-нибудь онлайн ресурс, наподобие замечательного http://regex101.com/ для регулярных выражений?
...
Рейтинг: 0 / 0
12.03.2015, 14:44:57
    #38902513
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT и условия для WHERE
scruwi,

Код: sql
1.
2.
3.
SELECT id, user, param, value
FROM tbl_name
WHERE user = IF( SELECT 1 FROM tbl_name WHERE user='user1' AND param='p1', 'user1', 'default')



С параметром p1 можно как-то так поступить. Далее надо думать на предмет остальной части выборки ... мне сейчас лениво. :)
...
Рейтинг: 0 / 0
12.03.2015, 15:44:47
    #38902621
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT и условия для WHERE
Формализуя задачу - для каждой группы по значению param выбрать первое значение value при сортировке по значению user (значение 'default' считать максимальным).
А это чистой воды FAQ: Выборка первой/последней записи в группах
...
Рейтинг: 0 / 0
12.03.2015, 15:52:49
    #38902638
scruwi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT и условия для WHERE
не совсем. мне нужен не только параметр p1, но так же p2, p3 и все остальные возможные. но если какой-то параметр перекрывается записью с user='user1' то оставлять только его. но подумав, я решил что проще делать разбор уже потом в php чтобы не городить сложных запросов. все равно после выборки я формирую массив с ключами одноименными значению param. все равно значение перекроется при правильной сортировке.
...
Рейтинг: 0 / 0
12.03.2015, 16:03:31
    #38902661
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT и условия для WHERE
Если задача - получать набор установок одним запросом для СТРОГО ОДНОГО юзера (для другого юзера - будет другой запрос), то можно поступить так:

Код: sql
1.
2.
3.
4.
SELECT param, COALESCE(t2.value, t1.value) value
FROM table t1
LEFT JOIN table t2
ON t1.param=t2.param AND t1.user = 'default' AND t2.user = 'user1'



Есссно предполагается, что для ВСЕХ param имеется default-значение, причём единственное.
...
Рейтинг: 0 / 0
12.03.2015, 16:40:38
    #38902739
scruwi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT и условия для WHERE
Akina,

спасибо, выглядит убедительно. буду пробовать.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT и условия для WHERE / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]