4

次のようなクエリがあります。

SELECT products.* FROM products
WHERE products.code = 'search word' OR products.id IN(SELECT product_names.product_id 
                     FROM product_names 
                     WHERE MATCH (product_names.name) 
                     AGAINST ('+search* +word*' IN BOOLEAN MODE) 
                     ORDER BY product_names.sorting_field)
ORDER BY ???

メインクエリの順序をWHERE IN(). FIELDまたはFIND_IN_SETから何が返されているのかわからないため、使用できないようですMATCH AGAINST

などを試してみORDER BY FIELD(products.id, product_names.product_id)ましたが、どうすればうまくいくのかわかりませんでした。

実際には、私のクエリはもっと​​長くて複雑です。これはやや擬似的なバージョンです。MATCH AGAINSTサブクエリの外側を実行できません。

4

1 に答える 1

3
SELECT   products.*
FROM     products LEFT JOIN (
  SELECT product_id, sorting_field
  FROM   product_names 
  WHERE  MATCH (product_names.name) AGAINST ('+search* +word*' IN BOOLEAN MODE) 
) t ON products.id = t.product_id
WHERE    products.code = 'search word' OR t.product_id IS NOT NULL
ORDER BY t.sorting_field
于 2012-10-11T14:15:09.917 に答える