Всем привет и спасибо, что решили попробовать помочь недоучке.
Есть 3 таблицы (имена заданы через константы):
1-ая (TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS) содержит свойства и id товаров, для которых они заданы
+---------------+---------------+-----------------------------+----------------------------------+
|_____ID_______|_products_id_|_products_extra_fields_id|_products_extra_fields_value_|
+---------------+---------------+-----------------------------+----------------------------------+
|______1______ |______6 ______|_____________4____________|_____________Y________________|
|______2 ______|______45_____|_____________4____________| _____________ Y ______________ |
2ая (TABLE_PRODUCTS) сокращенно
+---------------+---------------+-----------------------------+----------------------------------+
|_____ID_______|_products_id_|_____products_image_____|____products_page_url_______|
+---------------+---------------+-----------------------------+----------------------------------+
|______1_______|______6_______|_____photo1.jpg__________|__________tovar1.html________|
|______2_______|______25______|_____photo2.jpg__________|__________tovar2.html________|
3ья (TABLE_PRODUCTS_DESCRIPTION) сокращенно
+---------------+---------------+--------------------+
|_____ID_______|_products_id_|_products_name_|
+---------------+---------------+--------------------+
|______1_______|______6_______|____Товар 1______|
|______1_______|______25______|____Товар 2_____|
Выборку делаю следующим образом:
из 1ой таблицы выбираю 5 id товаров, у которых это свойство = 'Y'
Вторым выбираю нужные свойства товаров из 2 товарных таблиц.
Как это выглядит в коде:
$sql = "
SELECT
products_id
FROM " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . "
WHERE
products_extra_fields_id = '4'
and products_extra_fields_value = 'Y'
LIMIT 5";
$productsIds = "";
$query = vamDBquery($sql);
while ($one = vam_db_fetch_array($query,true)) {
$productsIds .= $one['products_id'].',';
}
// Теперь выбираем сами товары
$productsIds = substr($productsIds, 0, -1);
$sqlProd = "
SELECT
p.products_id,
p.products_image,
p.products_page_url,
p.products_price,
p.products_tax_class_id,
d.products_name
FROM " . TABLE_PRODUCTS . " AS p, " . TABLE_PRODUCTS_DESCRIPTION . " AS d
WHERE
p.products_id IN (".$productsIds.")
and p.products_id=d.products_id";
$queryProd = vamDBquery($sqlProd);
Дальше через fetch это все собирается в один массив и корректно выводится, т.е. это все работает.
НО!
"Плююсь" на способ, которым собираются id-шники да и вообще от 2 запросов для 1 действия. Да вообще, код, мне кажется, даже костылем не назовешь...
Как это оптимизировать можно? Хотелось бы объединить 2 запроса воедино...
Заранее спасибо за помощь