1

誰かが私を正しい方向に向けることができることを願っています。

プライマリ ID と国名 (フランスなど) を含む COUNTRY テーブルがあります。

プライマリ ID、支払い方法 ID (例: 4)、国 ID を含む 2 番目のテーブル PAYMETHODS_COUNTRIES があります。

どの国 (またはどの国のユーザー) がそれらのローカルの支払い方法にアクセスできるかを制御するために、各支払い方法のチェックボックスのリストを出力しようとしています。

チェックボックスのリストは正常に機能しており、フォームの処理も機能しています。最後に残っていることは、選択された国 (たとえば、この支払い方法はフランスとドイツで利用可能) が CHECKED として示されている国のチェックボックスのリストを出力することです。

だから私がやろうとしているのは、すべての国の完全なリストを出力することです

SELECT id, name FROM country ORDER BY id ASC

そして、このようなPAYMETHODS_COUNTRIESテーブルを含めます(もちろん機能しません)

SELECT country.id AS countryid,
country.name AS countryname,
paymethods_countries.id AS methodid
FROM country LEFT JOIN `paymethods_countries` 
ON country.id = paymethods_countries.country
WHERE paymethods_countries.paymethod = 10

このクエリの例では、実際に PAYMETHODS_COUNTRIES にレコードがある行のみを表示しています。

私が望んでいたのは、最後のフィールド (PAYMETHODS_COUNTRIES テーブルの ID) を含む、country.id + country.name の完全なリストです。これは、リンクがない場合は null にする必要があります。そうすれば、null かどうかをチェックし、それらの行に対して CHECKED を出力できるはずです。

それが理にかなっていることを願っています-または、誰かが私がやっていることを達成するためのより良い方法を知っているなら、あなたの考えは高く評価されます.

4

2 に答える 2

2

ここでの他の答えは望ましい結果を生成しますが、意味的には、条件を WHERE 句から ON 句に移動する方が正しいです。

SELECT country.id AS countryid,
    country.name AS countryname,
    paymethods_countries.id AS methodid
FROM country 
LEFT JOIN `paymethods_countries` 
   ON country.id = paymethods_countries.country and paymethods_countries.paymethod = 10

これにより、WHERE 句に余分な OR 条件を追加する必要がなくなります。

于 2012-11-12T04:39:17.400 に答える
2

paymethod must = 10と言うので、WHERE句のためにPAYMETHODS_COUNTRIESにレコードがある行のみが返されます。ORを追加してnullにもします。

SELECT country.id AS countryid,
   country.name AS countryname,
   paymethods_countries.id AS methodid
FROM country 
LEFT JOIN `paymethods_countries` 
   ON country.id = paymethods_countries.country
WHERE paymethods_countries.paymethod = 10
   OR paymethods_countries.paymethod IS NULL
于 2012-11-12T04:35:28.453 に答える