Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql + PHP ограничить количество значений выборки через CASE. / 5 сообщений из 5, страница 1 из 1
29.10.2020, 08:42
    #40012951
fegra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mysql + PHP ограничить количество значений выборки через CASE.
Хочу на Mysql ограничить количество значений выборки через CASE.
Допустим, если получили значения по первому условию, то остальные не работают.
Через PHP работаю на “mysqli” функциях.

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
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] =>       //<--- Почему-то пустое значение 
        )
...
Рейтинг: 0 / 0
29.10.2020, 09:51
    #40012957
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mysql + PHP ограничить количество значений выборки через CASE.
авторПочему-то пустое значение
Потому что переменная не инициализирована, и построитель считает, что её значение является константой и имеет значение NULL.

Код: sql
1.
2.
3.
...
FROM vpdm.main_arh, (SELECT @k:=0) init_var
...
...
Рейтинг: 0 / 0
29.10.2020, 12:46
    #40013008
fegra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mysql + PHP ограничить количество значений выборки через CASE.
Akina,

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

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

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

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

С чем это может быть связано?
...
Рейтинг: 0 / 0
29.10.2020, 15:31
    #40013081
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mysql + PHP ограничить количество значений выборки через CASE.
Делайте fiddle (или хотя бы публикуйте CREATE TABLE + INSERT INTO, форматированным в код текстом) и показывайте требуемый ответ для именно таких данных. Фотографии - это ниачём.

Да - укажите ТОЧНУЮ версию MySQL.
...
Рейтинг: 0 / 0
29.10.2020, 16:31
    #40013106
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Mysql + PHP ограничить количество значений выборки через CASE.
использование (и тем более вычисление с присвоением) переменных в части WHERE запросов - крайне НЕ рекомендуется, ибо в каком порядке и как часто оно будет (пере)вычисляться зависит как от версии Скуля, так и от "фазы Луны", в общем "как понравится оптимизатору"..
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql + PHP ограничить количество значений выборки через CASE. / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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