Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка из сериализованного массива
 
 автор: Igorek   (13.06.2013 в 13:16)   письмо автору
 
 

есть поле в котором хранится массив в сериализованном виде, например:
a:2:{i:0;a:3:{i:0;s:3:"175";i:1;s:3:"273";i:2;s:3:"272";}i:1;a:2:{i:0;s:3:"273";i:1;s:3:"272";}}

здесь 5 айдишников: 175,273,272,273,272. Есть ли вариант на чистом SQL их получить?
Варианты типа использовать php или нормализации не рассматриваем, иначе я бы не спрашивал)

  Ответить  
 
 автор: Sfinks   (13.06.2013 в 13:38)   письмо автору
 
   для: Igorek   (13.06.2013 в 13:16)
 

> на чистом SQL
-это имеется ввиду просто SELECT'ом, или можно использовать процедуры и функции (тоже без возврата на клиент)
Если первое и ID всегда 5, думаю можно попробовать.
Если первое и ID может быть любое количество, то на MySQL наверно никак. На MsSQL или Oracle, думаю можно - там есть рекурсии.
Если второе, то и на MySQL можно попробовать.

  Ответить  
 
 автор: Igorek   (13.06.2013 в 14:08)   письмо автору
 
   для: Sfinks   (13.06.2013 в 13:38)
 

просто селектом и кол-во ID переменное...

  Ответить  
 
 автор: Sfinks   (13.06.2013 в 16:27)   письмо автору
 
   для: Igorek   (13.06.2013 в 14:08)
 

Вообще, лично я таких вариантов не знаю.
Но если из принципа, именно только селектом....
И с огромным перерасходом ресурсов.....
И жутко медленно......
И с ограниченным верхним лимитом ID.....
И только уникальные ID (без повторов 273,272).......

Короче вот так с ограничением ID в 1 048 576:
SELECT id
FROM catalog
JOIN( SELECT a+b*4+c*16+d*64+e*256+f*1024+g*4096+h*16384+i*65536+j*262144 id FROM
      (SELECT 0 a UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)a,
      (SELECT 0 b UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)b,
      (SELECT 0 c UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)c,
      (SELECT 0 d UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)d,
      (SELECT 0 e UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)e,
      (SELECT 0 f UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)f,
      (SELECT 0 g UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)g,
      (SELECT 0 h UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)h,
      (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)i,
      (SELECT 0 j UNION SELECT 1 UNION SELECT 2 UNION SELECT 3)j
)z ON name LIKE concat('%"',id,'"%')
=))))))))))

  Ответить  
 
 автор: Igorek   (13.06.2013 в 17:29)   письмо автору
 
   для: Sfinks   (13.06.2013 в 16:27)
 

Ужас то какой))
думаю, что можно это все упростить за счет отсутствия необходимости генерировать набор чисел от 1 до 1048576, т.е. для моего примера подойдет такой вариант:

SELECT id
FROM catalog
WHERE LOCATE(CONCAT('"',id,'"'), 'a:2:{i:0;a:3:{i:0;s:3:"175";i:1;s:3:"273";i:2;s:3:"272";}i:1;a:2:{i:0;s:3:"273";i:1;s:3:"272";}}')


при условии, конечно, что ID в сериализованном значении существуют в catalog'е

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования