Приветствую!
Ребята есть следующая проблема,которую никак не могу решить. Я не программист и понимаю все интуитивно...
Есть БД с товарами, которую сканирует Сфинкс. Раньше он сканировал только те товары, которые есть в наличии. Сейчас - настроили чтобы сканировал все подряд..
На сайте есть живой поиск и когда в него вводишь запрос, вываливается окошко с быстрым результатом... Поскольку сфинкс перенастроили, нужно чтобы товары, которых нет в наличии не показывались в этом окне...
Если конкретно, то суть такова - выборка идет следующая:
Есть таблица site_products
$result = "
SELECT
`".$modx->dbConfig['table_prefix']."site_products`.`id` AS prod_id,
`".$modx->dbConfig['table_prefix']."site_products`.`brand`,
`".$modx->dbConfig['table_prefix']."site_products`.`longtitle`,
`".$modx->dbConfig['table_prefix']."site_products`.`category_title`,
`".$modx->dbConfig['table_prefix']."site_products`.`mainimg`,
`".$modx->dbConfig['table_prefix']."site_products`.`price_stock`,
`".$modx->dbConfig['table_prefix']."site_products`.`parent`,
`".$modx->dbConfig['table_prefix']."site_products`.`price_real`,
(SELECT `".$modx->dbConfig['table_prefix']."stock_products`.`stock_id` FROM `".$modx->dbConfig['table_prefix']."stock_products` WHERE `".$modx->dbConfig['table_prefix']."stock_products`.`product_id` = prod_id LIMIT 1) AS prod_stock_id
FROM
`".$modx->dbConfig['table_prefix']."site_products`
WHERE
`id` IN (".implode(', ', $aProdId).")
$sSQLCategory
LIMIT
$iLimit
";
Товары ищет по столбцам brand, longtitle, category_title (бренд, модель, категория - например, холодильник)
Соответствующая запись выборки с массива такова
$sql = $modx->db->query($result);
while ($myrow = mysql_fetch_row($sql)) {
// название товара
$sTitle = $myrow[1].' '.$myrow[2];
if ($myrow[3]) {$sTitle = $myrow[3].' '.$sTitle;}
Информация о наличии товара храниться в другой таблице site_products_info и я ее подключаю через LEFT JOIN и
Я делаю так:
SELECT
`".$modx->dbConfig['table_prefix']."site_products`.`id` AS prod_id,
`".$modx->dbConfig['table_prefix']."site_products`.`brand`,
`".$modx->dbConfig['table_prefix']."site_products`.`longtitle`,
`".$modx->dbConfig['table_prefix']."site_products`.`category_title`,
`".$modx->dbConfig['table_prefix']."site_products`.`mainimg`,
`".$modx->dbConfig['table_prefix']."site_products`.`price_stock`,
`".$modx->dbConfig['table_prefix']."site_products`.`parent`,
`".$modx->dbConfig['table_prefix']."site_products`.`price_real`,
(SELECT `".$modx->dbConfig['table_prefix']."stock_products`.`stock_id` FROM `".$modx->dbConfig['table_prefix']."stock_products` WHERE `".$modx->dbConfig['table_prefix']."stock_products`.`product_id` = prod_id LIMIT 1) AS prod_stock_id
FROM
`".$modx->dbConfig['table_prefix']."site_products`
LEFT JOIN
`".$modx->dbConfig['table_prefix']."site_products_info`
ON
`".$modx->dbConfig['table_prefix']."site_products`.`id` = `".$modx->dbConfig['table_prefix']."site_products_info`.`product_id`
WHERE
`".$modx->dbConfig['table_prefix']."site_products`.`id` IN (".implode(', ', $aProdId).") AND
`".$modx->dbConfig['table_prefix']."site_products_info`.`is_available` = 1
$sSQLCategory
LIMIT
$iLimit
В итоге у меня товары, которых нет в наличии не отображаются (как и нужно). Но поиск по бренду и названию категории не работает.. Вернее работает но странно - некоторые бренды и категории отображает, а некоторые нет.
Помогите разобраться, может я что-то не так делаю?
Из всего этого мне не ясно как использовать функцию `id` IN (".implode(', ', $aProdId).")
Может кто подскажет?