[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбор по массиву
rocker
Добрый день!
Как выбрать из базы данных запись, если выбираем по параметру из массива.

например

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

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

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

id vars

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

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

Спасибо!





Спустя 3 минуты, 29 секунд (22.05.2010 - 21:21) FatCat написал(а):
$query = "SELECT * FROM table WHERE id IN('".implode("','",$vars)."')";

Спустя 1 час, 7 минут, 54 секунды (22.05.2010 - 22:29) rocker написал(а):
Цитата (FatCat @ 22.05.2010 - 18:21)
$query = "SELECT * FROM table WHERE id IN('".implode("','",$vars)."')";

Не работает

Спустя 7 часов, 8 минут, 40 секунд (23.05.2010 - 05:38) rocker написал(а):
Переформулирую

Есть таблица с категориями вида
id категория

и таблица с например сайтами вида

id site cats

в катс записываем категории, тоесть пользователю дается возможность выбрать несколько категорий для сайта.

Как можно такое реализовать?

Спустя 1 час, 18 минут, 14 секунд (23.05.2010 - 06:56) Animir написал(а):
Эту задачу лучше решать не на уровне обработки информации, а на уровне хранения.
Например, добавьте еще одну таблицу, где будут храниться значения `id` категорий для каждого пользователя, а поле `cats` из первой таблицы удалите.

Спустя 4 дня, 15 часов, 1 минута, 25 секунд (27.05.2010 - 21:57) dimonise написал(а):
implode должен работать. если в vars текст то можно так попробовать

$query = "SELECT * FROM table WHERE id LIKE ('".implode("','",$vars)."')";


или циклом пробежаться

Спустя 10 часов, 32 минуты, 47 секунд (28.05.2010 - 08:30) Basili4 написал(а):
dimonise Запросы в циклах зло. лучше сделать один запрос который больше делает
Чем много быстрых.

Спустя 4 часа, 40 минут, 52 секунды (28.05.2010 - 13:11) twin написал(а):
Не факт это кстати.

Спустя 2 часа, 13 минут, 53 секунды (28.05.2010 - 15:25) Basili4 написал(а):
twin

Ну вот если логически подумать для того чтобы выполнить серверу запрос.

Надо время для персылки запроса для его обработки и возврата значения.
Если выполнить 10 таких зпросов то время на пересылки и возврат результата будет достаточно велико а если один и даже если он будет по времени обрабатыватся также как и 10 быстрых. уже можно выиграть время на пересылке.

Спустя 2 дня, 23 часа, 48 минут, 31 секунда (31.05.2010 - 15:13) SlavaFr написал(а):
Цитата (Basili4 @ 28.05.2010 - 12:25)
twin

Ну вот если логически подумать для того чтобы выполнить серверу запрос.

Надо время для персылки запроса для его обработки и возврата значения.
Если выполнить 10 таких зпросов то время на пересылки и возврат результата будет достаточно велико а если один и даже если он будет по времени обрабатыватся также как и 10 быстрых. уже можно выиграть время на пересылке.

логично, но к сожалению не всегда работает.

Имеется опыт, что при 15-17 JOINs и Таблицах с милионами данных все может обернутся совсем по другому.

Спустя 3 часа, 24 минуты, 59 секунд (31.05.2010 - 18:38) Gabriel написал(а):
Цитата (Basili4 @ 28.05.2010 - 12:25)
twin

Ну вот если логически подумать для того чтобы выполнить серверу запрос.

Надо время для персылки запроса для его обработки и возврата значения.
Если выполнить 10 таких зпросов то время на пересылки и возврат результата будет достаточно велико а если один и даже если он будет по времени обрабатыватся также как и 10 быстрых. уже можно выиграть время на пересылке.

не факт.
множество мелких запросов не всегда себя оправдывают, но и большие тоже не всегда выгодны. пробовать лиш методом проб и ошибок.

Спустя 2 дня, 21 час, 53 минуты, 49 секунд (4.06.2010 - 16:32) tomash написал(а):
$where = "WHERE id LIKE ";

for ($i = 0, $=count($vars), $i++)
{
if ($i==0)
{
$where .= ("'".$vars[$i].",' OR ',".$vars[$i]."'");
}
else
{
$where .= ("OR '".$vars[$i].",' OR ',".$vars[$i]."'");
}
}

$query = "SELECT * FROM table ".$where;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.