0

デフォルトでUNIONは、重複行が生成されないことを知っています。ただし、この場合、sort_col並べ替えの目的で列を使用したため、UNION重複する行が生成されます(実際にsort_colは各で異なるため、重複しませんselect)。明確にするために、この回答とコメントも参照してください。これを克服するにはどうすればよいですか?

$key_word_1 = $what;    
$key_word_2 = $what."%";    
$key_word_3 = "%".$what."%";


(SELECT 1 AS sort_col, 
        chair.id_user, 
        chair.company, 
        chair.district, 
        chair.summary, 
        chair.place, 
        products.name 
 FROM   chair 
        LEFT JOIN products 
               ON chair.id_user = products.id_user 
 WHERE  ( chair.district LIKE ? 
          AND chair.place LIKE ? ) 
        AND ( chair.company LIKE ? 
               OR chair.summary LIKE ? 
               OR products.name LIKE ? 
               OR products.description LIKE ? ) 
 GROUP  BY chair.id_user) 
UNION 
(SELECT 2, 
        chair.id_user, 
        chair.company, 
        chair.district, 
        chair.summary, 
        chair.place, 
        products.name 
 FROM   chair 
        LEFT JOIN products 
               ON chair.id_user = products.id_user 
 WHERE  ( chair.district LIKE ? 
          AND chair.place LIKE ? ) 
        AND ( chair.company LIKE ? 
               OR chair.summary LIKE ? 
               OR products.name LIKE ? 
               OR products.description LIKE ? ) 
 GROUP  BY chair.id_user) 
UNION 
(SELECT 3, 
        chair.id_user, 
        chair.company, 
        chair.district, 
        chair.summary, 
        chair.place, 
        products.name 
 FROM   chair 
        LEFT JOIN products 
               ON chair.id_user = products.id_user 
 WHERE  ( chair.district LIKE ? 
          AND chair.place LIKE ? ) 
        AND ( chair.company LIKE ? 
               OR chair.summary LIKE ? 
               OR products.name LIKE ? 
               OR products.description LIKE ? ) 
 GROUP  BY chair.id_user) 
ORDER  BY sort_col 
LIMIT 
?, ? 
4

2 に答える 2