Forum Webscript.Ru
Общие => Базы данных => Тема начата: Phoinix от 26 Августа 2003, 18:26:01
-
Возникла проблема, с выборкой данных из нескольких таблиц.
Код (Perl):
foreach (@subcategory) {$filter .= "$base_subcategory_table_mysql.subcategory_id =\'".$_."\' OR ";}
$filter =~s /OR\\s+$//;
$sql = "SELECT
$price_main_table_mysql.price_id,
$price_main_table_mysql.sklad,
$price_main_table_mysql.price,
$base_goods_table_mysql.name,
$base_goods_table_mysql.warranty,
$base_subcategory_table_mysql.name,
$base_category_table_mysql.name
FROM
$price_main_table_mysql,
$base_category_table_mysql,
$base_subcategory_table_mysql,
$base_goods_table_mysql
WHERE
$price_main_table_mysql.goods = $base_goods_table_mysql.goods_id AND
$base_goods_table_mysql.subcategory = $base_subcategory_table_mysql.subcategory_id AND
$base_subcategory_table_mysql.category = $base_category_table_mysql.category_id AND
$filter
ORDER BY $base_goods_table_mysql.name
";
&function_prepare_sql; $i[0] = 0;
while ($row = $sth -> fetchrow_arrayref()) {
$price[$i[0]][0] = $row->
$price[$i[0]][1] = $row->[1];
$price[$i[0]][2] = $row->[2];
$price[$i[0]][3] = $row->[3];
$price[$i[0]][4] = $row->[4];
$price[$i[0]][5] = $row->[5];
$price[0][6] = $row->[6];
$i[0]++;
}
$sth -> finish();
Вообщем смысл такой: скрипту передается несколько параметров в массив @subcategory, по этим данным как раз и производится основная выборка, остальные условия просто для связи таблиц между собой.
Когда скрипту передается один параметр, то все нормально работает, но при передаче двух и более параметров производится совершенно непонятная выборка, я грешу на то, что при передаче нескольких параметров условие WHERE принимает вид:
WHERE
price.goods = goods.goods_id AND
goods.subcategory = subcategory.subcategory_id AND
subcategory.category = category.category_id AND
subcategory.subcategory_id = \'1\' OR
subcategory.subcategory_id = \'2\'
Я подозреваю, что вся трабла в OR, т.к. логически построено неправильно, как я понимаю нужно сгруппировать условия OR что бы связи между таблицами применялись для каждого значения subcategory.subcategory_id вот только как это сделать не нашел...
-
Phoinix
лучше приводи запрос без perl-овых выражений.
Может
subcategory.subcategory_id IN (1,2);
то есть
$filter = " subcategory.subcategory_id IN (".join(",", @subcategory).")";
-
Макс
Спасибо заработало, я до этого пробовал применить подобное выражение, но не получил никакого результата, выражение имело вид:
subcategory.subcategory_id IN (\'1\', \'2\', \'3\')
А сейчас получается как:
subcategory.subcategory_id IN (1, 2, 3)
Кавычки были излишни...