我希望有人能够为我指明正确的方向。
我有一个 COUNTRY 表,其中包含主要 ID 和国家/地区名称(例如法国)
我有第二个表 PAYMETHODS_COUNTRIES,其中包含主要 ID、付款方式 ID(例如 4)和国家/地区 ID
我试图在每种支付方式上输出一个复选框列表,以控制哪些国家(或哪些国家的用户)可以使用这些本地支付方式。
我的复选框列表工作正常,表单的处理也正常。最后剩下的事情是输出带有选定国家/地区的国家/地区复选框列表(例如,此付款方式在法国和德国可用)显示为已选中。
所以我要做的是输出所有国家的完整列表
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 中实际有记录的行,而不是我想要的。
我所希望的是 country.id + country.name 的完整列表,其中包含最后一个字段(PAYMETHODS_COUNTRIES 表的 ID)- 在没有链接的情况下应该为 null。这样我应该能够检查是否为 null 或其他,并为这些行输出 CHECKED。
希望这是有道理的 - 或者如果有人知道实现我正在做的事情的更好方法,我们将不胜感激。
最佳答案
虽然此处的其他答案会产生所需的结果,但从语义上讲,将条件从 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 条件。
关于MySQL 与加入/选择标准作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338393/