powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / поиск в бд по масииву значений
25 сообщений из 26, страница 1 из 2
поиск в бд по масииву значений
    #37846053
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помощи есть строка типа
Код: php
1.
$string_ukr = 'і, є,ї';

-по этим значениям надо осуществить поиск по одному полю в бд на совпадение.
Делаю так:
Код: php
1.
2.
3.
4.
5.
$string_ukr = 'і, є,ї';
$ukr = preg_split("/[\s]*[,][\s]*/", $string_ukr);
foreach ($ukr as $value) {
	       $ukr_fields =  $value ;
	       }

- превожу строку в массив
Код: php
1.
2.
for ($u =0; $u < 3; $u++) 
$q_parse = "select * from  NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%".strtolower($ukr_fields[$u])."%'";


echo - вывожу запрос и получаю вот такую бяку в таблице всего 7 записей, просчитал верно кол-во запросов получилось 21, В переменную
Код: php
1.
$ukr_fields[$u]

не попадает value = 'і, є,ї' массива, а подставляются знаки вопросов "?" ,а в последний запрос вообще ничего не подставляется.
авторselect * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%?%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%%' . Помогите что я делаю не так?
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846063
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
androidx,

читайте про юникод. при работе с ним нужно использовать специальные строковые функции и флаги внутри регулярных выражений.
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846108
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r uandroidx,

читайте про юникод. при работе с ним нужно использовать специальные строковые функции и флаги внутри регулярных выражений.
Причем тут юникод у меня в пременную совсем не то подставляется, если сделать так
Код: php
1.
$q_parse = "select * from  NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%".strtolower($ukr_fields)."%'"

-то все подставляется только первое значение массива "і", а остальные "є,ї" не подставляются
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846122
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
androidx,

нихотите, как хотите...
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846212
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846291
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
androidx,

Заинсертите украинские буквы во временную табличку, а дальше или соединение, или IN.
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846382
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да хоть как делай, если он юникод обрабатывает функцией которая для этого не предназначена, то результата нужного не будет.
К тому же кодировки case insensetive как бы намекают на свое предназначение и по возможности следует использовать их.
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846385
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и не нужно будет никакого геммороя в виде lowercase
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846387
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSergeandroidx,

Заинсертите украинские буквы во временную табличку, а дальше или соединение, или IN.
Спасибо!
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846395
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeandroidx,

Заинсертите украинские буквы во временную табличку, а дальше или соединение, или IN.

А что это даст?
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846399
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал разные вариации с юникодом не помогло такое впечатлении что проблема в переменной
Код: php
1.
$ukr_fields[$u]

, если просто , так сделать
Код: php
1.
strtolower($ukr_fields)

, то все ок, только подставляет она в запрос только первый символ из массива! Может есть другое решение?
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846401
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
show create table NOMENKLATURA


покажите
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846415
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett
Код: sql
1.
show create table NOMENKLATURA


покажите
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE AUA.NOMENKLATURA
(
  ID             NUMBER                         NOT NULL,
  NDL            NUMBER                         DEFAULT 0,
  TP_NOM         NUMBER                         DEFAULT 1,
  NAMES_UKR      VARCHAR2(2000 BYTE),
  NAMES_RUS      VARCHAR2(2000 BYTE),
  GOST           VARCHAR2(100 CHAR),
  ID_UN          NUMBER,
  ID_CLASS_DK    NUMBER,
  CLASS_DK_TEXT  VARCHAR2(30 BYTE),
  NOTES          VARCHAR2(4000 BYTE),
  NOTES_ZAK      VARCHAR2(4000 BYTE),
  ITSUSLUG       NUMBER
)
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846422
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NAMES_RUS обычное текстовое поле
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846433
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кодировка?
короче ищите регистронезависимое сравнение для своей кодировки

Код: sql
1.
show collation like 'utf%';



Смотрите какое сравнение в таблице используется, если не ci то либо задаете ci, или же, если же возможности нет, то можно использовать сравнение указав в запросе:

Код: sql
1.
2.
3.
SELECT * 
  FROM mb_seo_block 
  WHERE `data` LIKE 'u' COLLATE 'utf8_general_ci';



хотя если вы используете юникод, то не знаю, где вы взяли там регистрозависимый collation, разве что utf8_bin.
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846440
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче уберите все эти LOWER и lowercase и все должно работать.
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846442
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема начинается еще здесь, судя по всему
Код: php
1.
$ukr = preg_split("/[\s]*[,][\s]*/u", $string_ukr);
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846443
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
$ukr = preg_split("/[\s]*[,][\s]*/u", $string_ukr);
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846449
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что это за СУБД вообще?
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846454
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CУБД Oracle кодировка utf-8 везде
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846473
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поменял запрос код остался тот же
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$string_ukr = 'і, є,ї';
        $ukr = preg_split("/[\s]*[,][\s]*/", $string_ukr);
     
	    
		 foreach ($ukr as $value) {
	      $ukr_fields =  $value ;
	   
	       }
$q_parse = "select * from  NOMENKLATURA where  LOWER (NAMES_RUS) LIKE '%".strtolower($ukr_fields)."%'";


результат получил такой авторselect * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%' все отлично подставил, только мне надо чтоб он еще и эти буква проверял "і, є", а он их не проверяет :(
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846482
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подставляет только последнюю букву из массива "ї"androidxпоменял запрос код остался тот же
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$string_ukr = 'і, є,ї';
        $ukr = preg_split("/[\s]*[,][\s]*/", $string_ukr);
     
	    
		 foreach ($ukr as $value) {
	      $ukr_fields =  $value ;
	   
	       }
$q_parse = "select * from  NOMENKLATURA where  LOWER (NAMES_RUS) LIKE '%".strtolower($ukr_fields)."%'";


результат получил такой авторselect * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%'select * from NOMENKLATURA where LOWER (NAMES_RUS) LIKE '%ї%' все отлично подставил, только мне надо чтоб он еще и эти буква проверял "і, є", а он их не проверяет :(
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846486
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
режим WRITE ONLY походу
ладно, может кому другому пригодится
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846502
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В оракл есть NLSSORT
...
Рейтинг: 0 / 0
поиск в бд по масииву значений
    #37846512
androidx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да есть
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / поиск в бд по масииву значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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