2017-11-22 3 views
0

MySQLのものをやっていて、解決するのが難しい状況になっています。 brand_idが0であれば、p_namekeywordと一致2つのテーブルを任意の列の一致で結合する

  • :ここ

    は、私は以下与えるようuser_fav表と一致する商品の数を見つけようとしています2つのMySQLのテーブル

    Table1: user_fav 
    
    fav_id | brand_id | Keyword 
        1 | 0  | test 
        2 | 67 | test1 
        3 | 68 | 
    
    
    Table 2: products 
    
    p_id | p_brand | p_name 
        1 | 67 | test1 shoes 
        2 | 68 | test shoes 
    

    です

  • brand_id> 0およびkeyword != ''の場合、両方の条件で結合します。
  • その後、> 0 brand_idkeyword == ''brand_id and p_brand

総合的に参加する場合は、私がuser_fav行にマッチする製品の数を見つける必要があります。

は、このクエリを試してみましたが、それは1つの条件のみ含まれない:

select `uf`.`fav_id`, count(`p`.`p_id`) AS `pcount` from (`user_fav` `uf` left join `products` `p` on(((`p`.`p_name` like convert(concat('%',`uf`.`keyword`,'%') using utf8))))) group by `uf`.`fav_id` 

任意の提案は、この問題を解決するために?

ありがとうございます!

答えて

2

SQL DEMO

SELECT u.*, count(p.p_id) as pcount 
FROM user_fav u 
JOIN products p 
    ON (u.`brand_id` = 0 and p.`p_name` Like CONCAT('%', u.`Keyword`, '%')) 
    OR (u.`Keyword` = '' and u.`brand_id` = p.`p_brand`) 
    OR ( u.`brand_id` > 0 and u.`Keyword` <> '' and 
     (u.`brand_id` = p.`p_brand` AND p.`p_name` Like CONCAT('%', u.`Keyword`, '%')) 
    ) group by u.fav_id 

OUTPUT

| fav_id | brand_id | Keyword | pcount | 
|--------|----------|---------|--------| 
|  1 |  0 | test |  2 | 
|  2 |  67 | test1 |  1 | 
|  3 |  68 |   |  1 | 
0

あなたは、各ルールセットはグループの条件であることができるのでので、あなたの参加条件はただ、1対1であることはありません次のものを除いて。

select 
    `uf`.`fav_id`, 
    count(`p`.`p_id`) AS `pcount` 
from 
    `user_fav` `uf` 
left join 
    `products` `p` 
    ON (
     `uf`.`brand_id` = 0 
     AND `uf`.`Keyword` = `p`.`p_name` 
    ) 
    OR (
     `uf`.`brand_id` > 0 
     AND `uf`.`Keyword` != '' 
     AND `uf`.`Keyword` = `p`.`p_name` 
     AND `uf`.`brand_id` = `p`.`p_id` 
    ) 
    OR (
     `uf`.`brand_id` > 0 
     AND `uf`.`Keyword` = '' 
     AND `uf`.`brand_id` = `p`.`p_id` 
    ) 
group by `uf`.`fav_id` 
関連する問題