Возникла проблема, с выборкой данных из нескольких таблиц.
Код (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 вот только как это сделать не нашел...