Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Mysql + PHP ограничить количество значений выборки через CASE.  [new]
fegra
Member

Откуда:
Сообщений: 2
Хочу на Mysql ограничить количество значений выборки через CASE.
Допустим, если получили значения по первому условию, то остальные не работают.
Через PHP работаю на “mysqli” функциях.

Придумал вот такое решение, которое сортирует и проставляет значения рангу ячеек в отдельный столбец.
(далее в php нахожу наиболее свежую версию файла, удовлетворяющую условиям)
Вариант, наиболее симпатичен с точки зрения работы с php, но результат работы варианта равен пустоте если работать в MYSQL через php. Причём через MYSQL запросы проходят нормально.
Где ошибка?
Или вообще я не с правильной стороны подошёл к решению вопроса ?

SELECT *,@k as k
FROM vpdm.main_arh 
WHERE fullpath NOT LIKE \"%Архив аннулированных%\" $ids  $nids
AND 
CASE
WHEN info LIKE \"%$string%.pdf\" AND ids=\"Тех_Усл\" THEN @k:=1
[.skip.]
WHEN info LIKE \"%$st3%.pdf\" THEN @k:=9
ELSE @k=10
END
Order by k
LIMIT 10;


Результаты работы через php:
SELECT *,@k as k
FROM vpdm.main_arh 
WHERE fullpath NOT LIKE "%Архив аннулированных%"   
AND 
CASE
WHEN info LIKE "%У38_424_005%01_02%.pdf" AND ids="Тех_Усл" THEN @k:=1
WHEN info LIKE "У38_424_005%01_02%.pdf" AND ids="npk5_pdf_arh" THEN @k:=2
WHEN info LIKE "У38_424_005%01_02%.pdf" AND ids="СМК_ОАО_Морион" THEN @k:=3
WHEN info LIKE "У38_424_005%01_02%.pdf" THEN @k:=4
WHEN info LIKE "%У38_424_005%01_02%.pdf" THEN @k:=5
WHEN decnum LIKE "%У38_424_005%01_02%" and info LIKE "%.pdf" THEN @k:=6
WHEN info LIKE "%У38_424_005%01_02%.pdf" THEN @k:=7
WHEN info LIKE "%У38_424_005%.pdf" THEN @k:=8
WHEN info LIKE "%У38_424_005%01_02%.pdf" THEN @k:=9
ELSE @k:=10
END
Order by k
LIMIT 10

//---- Результат:
Array
(
    [0] => Array
        (
            [id] => 1
            [decnum] => 
            [fullpath] => c:/VirtHoshs/PdfArh/Новое/Горелка двухщелевая для резки колб.pdf
            [info] => Горелка двухщелевая для резки колб.pdf
            [ids] => npk5_pdf_arh
            [k] =>       //<--- Почему-то пустое значение 
        )

    [1] => Array
        (
            [id] => 2
            [decnum] => 
            [fullpath] => c:/VirtHoshs/PdfArh/Новое/Держатель к двухщелевой горелке.pdf
            [info] => Держатель к двухщелевой горелке.pdf
            [ids] => npk5_pdf_arh
            [k] =>       //<--- Почему-то пустое значение 
        )


К сообщению приложен файл. Размер - 64Kb
29 окт 20, 08:42    [22222750]     Ответить | Цитировать Сообщить модератору
 Re: Mysql + PHP ограничить количество значений выборки через CASE.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
автор
Почему-то пустое значение

Потому что переменная не инициализирована, и построитель считает, что её значение является константой и имеет значение NULL.

...
FROM vpdm.main_arh, (SELECT @k:=0) init_var
...
29 окт 20, 09:51    [22222764]     Ответить | Цитировать Сообщить модератору
 Re: Mysql + PHP ограничить количество значений выборки через CASE.  [new]
fegra
Member

Откуда:
Сообщений: 2
Akina,

Спасибо большое заработало.

Но есть один нюанс.

В ответе на запрос данные, которые выделены относятся к запросу по 14 строке, а результат переменной почему-то проставляется - "4" из 9й строки.

Если 9ю строку закомментировать, то количество данных уменьшится до 1го.

С чем это может быть связано?

К сообщению приложен файл. Размер - 55Kb


Сообщение было отредактировано: 29 окт 20, 12:45
29 окт 20, 12:46    [22222863]     Ответить | Цитировать Сообщить модератору
 Re: Mysql + PHP ограничить количество значений выборки через CASE.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Делайте fiddle (или хотя бы публикуйте CREATE TABLE + INSERT INTO, форматированным в код текстом) и показывайте требуемый ответ для именно таких данных. Фотографии - это ниачём.

Да - укажите ТОЧНУЮ версию MySQL.

Сообщение было отредактировано: 29 окт 20, 15:27
29 окт 20, 15:31    [22222995]     Ответить | Цитировать Сообщить модератору
 Re: Mysql + PHP ограничить количество значений выборки через CASE.  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3399
использование (и тем более вычисление с присвоением) переменных в части WHERE запросов - крайне НЕ рекомендуется, ибо в каком порядке и как часто оно будет (пере)вычисляться зависит как от версии Скуля, так и от "фазы Луны", в общем "как понравится оптимизатору"..

Сообщение было отредактировано: 29 окт 20, 16:27
29 окт 20, 16:31    [22223039]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить