Выбор по массиву

manrock

Новичок
Выбор по массиву

Добрый день!
Как выбрать из базы данных запись, если выбираем по параметру из массива.

например

//подключилсь к БД...

$vars = array(1, 3, 7, 9); // тут значения по которым выбираем

Дальше в бд ищем запись. Записи такого рода

id vars

в id хранятся id в vars числа через запятую напрмер 3, 9

Нужно выбрать строчку в которой в строке vars будет хотябы одно совпадение из массива $vars

$query = "SELECT * FROM table WHERE vars IN('".implode("','",$vars)."')"; - пробовал так, но не получается...выдает ошибку

Спасибо!
 

manrock

Новичок
$vars = array(1, 2);
$in = implode("','",$vars);
$query = "SELECT * FROM table WHERE cats IN('".$in."')";
echo mysql_num_rows($query);

выдает ошибку mysql_num_rows(): supplied argument is not a valid MySQL result resource in
 

Ivanov

Новичок
кавычки посмотри, и посмотри - у тебя было vars стало cats
 

manrock

Новичок
и еще, поясни что значит в vars числа через запятую напрмер 3, 9
ну в ячейке данные записанны в виде 3,1,2,4 нужно чтобы если например в $vars есть хотябы 3 то найдена была эта запись.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
manrock
Ответ на твой вопрос есть в мануале
[m]mysql_num_rows[/m]
Смотрим какой аргумент принимает ф-ция

-~{}~ 23.05.10 01:41:

manrock
Заметка на будущее.
1. При проблемах с запросами следует приводить не смесь запроса с пхп тегами, а чистый SQL-запрос.
2. Пример своего кода - максимально сокращать не до такой степени, как в первом посте =))
 

The employer

Новичок
Re: Выбор по массиву

Автор оригинала: manrock
id vars

в id хранятся id в vars числа через запятую напрмер 3, 9

Нужно выбрать строчку в которой в строке vars будет хотябы одно совпадение из массива $vars
Наилучшим выходом для Вас будет изменить структуру базы. Не нужно хранить массивы чисел в текстовом поле через запятую.

Если у Вас немного разных значений - используйте для vars поле типа set. Если разных чисел в поле vars может быть много (больше 64, afair) - сделайте еще одну таблицу, и свяжите ее с исходной.

Еще хороший вариант - просто сделать так, чтобы в вашей таблице в поле vars всегда хранилось только одно число. Наример, если сейчас в вас есть запись вида
id:15 vars:1, 3, 5

то вместо нее появятся три записи
id:15 vars:1
id:15 vars:3
id:15 vars:5

Для Вашей задачи этого достаточно. В этом случае будет работать тот запрос, что в исходном сообщении.

Ну а если Вам непременно нужно чтобы с извращениями - постройте полнотекстовый индекс по полю vars, и ищите числа как текст. Либо через match ... against ..., либо при помощи сфинкса.
 
Сверху