|
|
|
| Привет!
Возможно ли прямо при запросе к базе раскрыть массив записанный при помощи функции serialize и проверить присутствует ли там искомое значение или нет.
К примеру запрос (не корректный):
<?php
$query = "
SELECT * FROM table
WHERE '1' IN (unserialize(my_array))
";
?>
|
На PHP:
<?php
$q = array('1','2','3'); // массив
$w = serialize($q); // для записи в базу
// в запросе нужно выполнить что то типа этого
$e = unserialize($w);
if(in_array('1', $e)) {
echo 'true';
} else {
echo 'false';
}
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(28.06.2012 в 13:37)
| | Возможно ли прямо при запросе к базе раскрыть массив
нет | |
|
|
|
|
|
|
|
для: Valick
(28.06.2012 в 16:04)
| | Зачем же так категорично?
Сериализованный массив - это обычная строка. И искать в ней можно все что угодно.
Единственное, что подход "от противного" должен быть.
Т.е. не "раскрыть массив", а "сериализовать элемент массива".
Например нужно найти строки, где в массиве есть элемент со значением "строка".
Это можно сделать, например, запросом:
SELECT * FROM tbl WHERE fld_array LIKE '%s:6:"строка";%'
|
Можно и через INSTR вместо LIKE. | |
|
|
|
|
|
|
|
для: Sfinks
(28.06.2012 в 16:27)
| | Зачем же так категорично?
чтоб не повадно было
хотите мое личное мнение?
нечего сериализованным данным делать в бд, тем более тем среди которых нужно что-то искать | |
|
|
|
|
|
|
|
для: Valick
(28.06.2012 в 17:29)
| | Это вопрос десятый.
Кстати, мое мнение с вашим совпадает. | |
|
|
|