Тащим все записи из таблицы тегов:
if ($limit)
$limit = ' LIMIT '.(($limit * PRODUCTS_IN_PAGE) - PRODUCTS_IN_PAGE).', '.PRODUCTS_IN_PAGE;
else
$limit = '';
$this->db->sql_query('SELECT DISTINCT `product` FROM `'.KEYWORDS_TABLE.'` WHERE `word`="'.$this->db->escape_string($tag).'" ORDER BY `id` DESC'.$limit);
Имеем запрос вида
SELECT DISTINCT `product` FROM `my_keywords` WHERE `word`="слово" ORDER BY `id` DESC LIMIT 20, 20
Дальше формируем запрос, чтобы вытащить инфу по записям:
$where = '';
while ($row = $this->db->fetchrow())
$where .= '`key`="'.$row['product'].'" OR ';
if ($where == '')
return array();
$where = substr($where, 0, -4);
$result = $this->db->sql_query('SELECT * FROM `'.PRODUCTS_TABLE.'` WHERE '.$where);
Все вроде бы нормально. Но засада в том, что нужно эти товары упорядочивать по имени. Если тупо добавить ORDER BY `name`, то упорядочиваться будет только текущая страница (текущие 20 товаров), а нужно упорядочивать именно все. Лимит во второй запрос пихать нельзя (во всяком случае, в данной ситуации), так как вернется пустой результат (оно и понятно).
Вопрос: можно ли решить задачу средствами MySQL, или придется плясать с бубном, тянуть все товары по тегу без лимита и потом только упорядочивать по имени?