powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql + PHP ограничить количество значений выборки через CASE.
5 сообщений из 5, страница 1 из 1
Mysql + PHP ограничить количество значений выборки через CASE.
    #40012951
fegra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу на 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
Mysql + PHP ограничить количество значений выборки через CASE.
    #40012957
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПочему-то пустое значение
Потому что переменная не инициализирована, и построитель считает, что её значение является константой и имеет значение NULL.

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

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

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

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

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

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

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


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