Как выбрать из базы данных запись, если выбираем по параметру из массива.
например
//подключилсь к БД...
$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
в катс записываем категории, тоесть пользователю дается возможность выбрать несколько категорий для сайта.
Как можно такое реализовать?
Есть таблица с категориями вида
id категория
и таблица с например сайтами вида
id site cats
в катс записываем категории, тоесть пользователю дается возможность выбрать несколько категорий для сайта.
Как можно такое реализовать?
Спустя 1 час, 18 минут, 14 секунд (23.05.2010 - 06:56) Animir написал(а):
Эту задачу лучше решать не на уровне обработки информации, а на уровне хранения.
Например, добавьте еще одну таблицу, где будут храниться значения `id` категорий для каждого пользователя, а поле `cats` из первой таблицы удалите.
Например, добавьте еще одну таблицу, где будут храниться значения `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 быстрых. уже можно выиграть время на пересылке.
Ну вот если логически подумать для того чтобы выполнить серверу запрос.
Надо время для персылки запроса для его обработки и возврата значения.
Если выполнить 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;
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;