2011-11-16 22 views
0

私はカスタムショップを持っており、配送をやり直す必要があります。しかし、それは後であり、その間に、カートに特定の範囲の商品のみが含まれている場合は、配送オプションを追加する必要があります。これにMysql:商品制限配送オプションをカートに追加

SO ship_methodテーブルがある

id menuname  name  zone maxweight 
1 UK Standard ukfirst 1 2000 
2 UK Economy uksecond 1 750 
3 Worldwide Air world_air 4 2000 

私は別の列の既存のもののために0でprod_restrict、および制限されたもののために1、2列が含まれていship_prod_restrictと呼ばれる新しいテーブルを追加しました、ship_method_idおよびitem_idに、配送カテゴリで許可される商品をリストします。 私は自分の取引を調べるだけです。各カートについて、どの配送方法がprod_restrictが0か1かを確認し、カートには規制テーブルにない商品がありません。

残念ながら、外側のクエリから内側のクエリに値を設定することができないため、わかりやすい方法で見つけることができないようです。 (による以下のコメントへの完全なクエリを表示するために編集した)

select ship_method.* from ship_method, ship_prod_restrict where 
ship_method.`zone` = 1 and prod_restrict='0' or 
(
    prod_restrict='1' 
    and ship_method.id = ship_prod_restrict.ship_method_id 
    and (
     select count(*) from (
     select transactions.item from transactions 
     LEFT JOIN ship_prod_restrict 
     on ship_prod_restrict.item_id = transactions.item 
     and ship_prod_restrict.ship_method_id=XXXXX 
     where transactions.session='shoppingcartsessionid' 
     and item_id is null 
    ) as non_permitted_items < 1) 
group by ship_method.id 

はあなたのセクションが一致するかどうかのリストを与え、内側のクエリとして動作しますが、私はXXXXXで(そこにそのship_method_idを得ることができません)。

これを行う簡単な方法はありますか、それとも間違っているのでしょうか?私は現在、プライマリ出荷表を変更することはできません。これは既に既に実施されていますが、他のビットは変更可能です。私もPHPの中でそれを行うことができますが、あなたが知っている、それは不正行為のようだ!

答えて

1

カウントは重要であるが、これは軽量化ビットかもしれませんどのようにわからない - ハードがフルテーブルスキーマダンプせずに伝えるために:数が約だったものを見るために、クエリの残りの部分を追加した

SELECT COUNT(t.item) FROM transactions t 
INNER JOIN ship_prod_restrict r 
ON r.item_id = t.item 
WHERE t.session = 'foo' 
AND r.ship_method_id IN (**restricted, id's, here**) 
+0

。出力は、有効な出荷方法のリストである必要があります – Woody

関連する問題