Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возможен такой запрос?

59K
05 мая 2010 года
MisterSer
3 / / 05.05.2010
Подскажите пожалуйста, возможно это решить одним запросом, чтоб в результате получить все уникальные значения?

Таблица содержит поля: id, name, ref, ok. (все поля int, кроме name)
Необходимо выбрать из таблицы 10 строк при условии:
1) поле ок = 1;
2) если поле ref = 0, то в результат нужно содержимое поля id;
3) если поле ref > 0, то в результат нужно содержимое поля ref;
4) числа в результате должны быть уникальными.

Спасибо.
385
06 мая 2010 года
SomewherSomehow
477 / / 25.07.2004
возможно!
59K
06 мая 2010 года
MisterSer
3 / / 05.05.2010
Спасибо, подскажите пожалуйста реализацию для mySQL
385
06 мая 2010 года
SomewherSomehow
477 / / 25.07.2004
К сожалению я не работаю с MySQL, для MS SQL было бы так:
 
Код:
select distinct
    res = case when ref > 0 then ref else id end
from
    MyTable
where
    ok = 1


По-моему конструкция case есть и в MySQL, синтаксис уточните в документации, в целом идея такая.
59K
09 мая 2010 года
MisterSer
3 / / 05.05.2010
Решение частично есть, запрос:
 
Код:
SELECT DISTINCT
if (ref = 0, id, ref) AS rez
FROM
 MyTable
WHERE ok = 1

но помимо rez еще необходимо получить значение поля name, а оно уникальное у всех строк. То есть запрос
 
Код:
SELECT DISTINCT
if(ref = 0, id, ref) AS rez, name
FROM
 MyTable
WHERE ok = 1

не решает задачу. В результат попадают все строки таблицы.

Как поправить запрос, чтоб в результат попадали еще и имена уникальных чисел? Пример:

id - name - ref - ok
1 - Ivan - 0 - 1
2 - Nikita - 0 - 0
3 - Katrin - 2 - 1
4 - Nata - 1 - 0
5 - Slava - 4 - 1

результат:
rez - name
1 - Ivan
2 - Nikita
4 - Nata

Первый пример кода возвращает только числа: 1,2,4
Спасибо.
339
10 мая 2010 года
verybadbug
619 / / 12.09.2005
 
Код:
SELECT * FROM `mytable` WHERE `id` IN (
  SELECT DISTINCT IF( `ref` =0, `id`, `ref`) AS `rez`
  FROM `mytable`
  WHERE `ok` =1
)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог