0

このあたりがよく分からないので、どなたかアドバイスお願いします。

個別のテーブルを使用していくつかのキーワードを割り当てた製品が多数あります。これらのキーワードを反復処理して、同じキーワードを含む他の製品のリストを作成したいと思います...したがって、以下の例では、ID が 149 の製品に 2 つのキーワードが割り当てられていますが、SQL は1つのキーワードで製品に取り組みます。

そのため、両方のキーワードを使用して製品のリストを作成する方法については、よく理解できません。どんな助けでも素晴らしいでしょう。

SQL:-

 $products_id = $_GET['products_id'];
 $slideQuery = mysql_query("

 select p.products_id, p.products_image, p.products_price, 
 pd.products_name, k2p.key_key_id  

 from products p

 join products_description pd on 
 pd.products_id = p.products_id 

 join products_keyword_to_product k2p on 
 k2p.products_id = p.products_id 

 where k2p.key_key_id = (
      select key_key_id  
  from
  products_keyword_to_product
  where 
  products_id=" . $products_id ."
      )  

  group by p.products_id 
  order by p.products_price desc 
  limit 12

編集して追加: 以前に php while ループを使用してこのループ内でデータベースにクエリを実行することでこれを達成しましたが、これを行うためのより良い方法が必要であると確信しています。

更新: この質問から受け取った提案を調べましたが、クエリを完全に機能させることができませんでした。この時点で、私の「給与等級」を少し超えているので、関連する ID を URL 文字列に渡し、ページを再ロードするリンクを作成することにしました。サイトが成長するにつれて、とにかくより良いオプションであることが判明するでしょう。 . ここで学んだ教訓は、達成しようとしていることから一歩下がって、現在の方法がそれを達成するための最善の方法であることを確認することだと思います.

4

2 に答える 2

1

GROUP BY と HAVING を使用してこれを行う必要があります。

select p.products_id,
    p.products_image,
    p.products_price,
    pd.products_name,
    k2p.key_key_id
from products p
inner join (
    select products_id
    from products_keyword_to_product
    where key_key_id in (
        select key_key_id
        from products_keyword_to_product
        where products_id = " . $products_id ."
    )
    group by products_id
    having count(distinct key_key_id) = (
        select count(distinct key_key_id)
        from products_keyword_to_product
        where products_id = " . $products_id ."
    )
) pm on p.products_id = pm.products_id
inner join products_keyword_to_product k2p on k2p.products_id = p.products_id
inner join products_description pd on pd.products_id = p.products_id
order by p.products_price desc 
limit 12
于 2012-10-04T13:47:15.990 に答える
1

INの代わりに使用してみてください=

すなわち:

 ....
 where k2p.key_key_id IN ( 
 ....
于 2012-10-04T13:51:57.650 に答える