Нужна помощь в корректном написании запроса на извлечение БД

Автор Тема: Нужна помощь в корректном написании запроса на извлечение БД  (Прочитано 1146 раз)

Оффлайн backАвтор темы

  • Бизнес оценка: (0)
  • Ветеран
  • *****
  • СПАСИБО: 314
  • Сообщений: 636
  • Карма: 66

Оффлайн backАвтор темы

  • Ветеран
  • *****
Приветствую!
Ребята есть следующая проблема,которую никак не могу решить. Я не программист и понимаю все интуитивно...

Есть БД с товарами, которую сканирует Сфинкс. Раньше он сканировал только те товары, которые есть в наличии. Сейчас - настроили чтобы сканировал все подряд..

На сайте есть живой поиск и когда в него вводишь запрос, вываливается окошко с быстрым результатом... Поскольку сфинкс перенастроили, нужно чтобы товары, которых нет в наличии не показывались в этом окне...

Если конкретно, то суть такова - выборка идет следующая:

Есть таблица 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).")

Может кто подскажет?








Продвигаемся и развиваемся :) Подключайтесь!


Оффлайн backАвтор темы

  • Бизнес оценка: (0)
  • Ветеран
  • *****
  • СПАСИБО: 314
  • Сообщений: 636
  • Карма: 66

Оффлайн backАвтор темы

  • Ветеран
  • *****
Продвигаемся и развиваемся :) Подключайтесь!


 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
3033 Просмотров
Последний ответ 30-12-2010, 02:12:14
от orochimaru6
7 Ответов
2342 Просмотров
Последний ответ 12-09-2011, 16:57:42
от mark3000
2 Ответов
1365 Просмотров
Последний ответ 20-09-2011, 13:20:30
от nnpcto
8 Ответов
2519 Просмотров
Последний ответ 09-09-2014, 17:22:20
от Rod
4 Ответов
923 Просмотров
Последний ответ 08-12-2020, 19:44:36
от chaser