我正在请求您对以下内容的建议:
我有两张桌子:
客户和订单。
我使用while循环打印表中客户的数据:
$sql = "SELECT * FROM wccrm_customers where status = '1' order by date desc";
$result = mysql_query($sql, $db);
while ($daten = mysql_fetch_array($result)) { ?>
echo $daten[id];
echo $daten[name] . ' ' . $daten[vorname];
echo $daten[email];
echo $daten[telefon];
} ?>
现在我尝试在此列表中添加一个新字段:购买是/否。由于我们有更多的客户,然后买家,我们想要显示是否有人买了:
这两个表之间的连接是两个表中的第一个/最后一个名字!
因此,如果customer.name = orders.name和customer.firstname = orders.firstname,我想回复"是"如果不是那么"否"
我尝试了一个JOIN,但在这里我只得到两个表中的结果:
SELECT *
FROM wccrm_customers AS k
INNER JOIN wccrm_orders AS o
ON o.namee = k.name AND o.firstname = k.firstname
但我需要让所有客户和两个列表中的客户都标记为......
这可能吗?如果是:我怎样才能做到这一点?
感谢您的建议!
亲切的问候,
的Stefan
答案 0 :(得分:2)
这与PHP或while循环无关;你只需要正确地形成你的联接:
SELECT DISTINCT
`k`.*,
`o`.`namee` IS NOT NULL AS `Purchased`
FROM `wccrm_customers` AS `k`
LEFT JOIN `wccrm_orders` AS `o`
ON
`o`.`namee` = `k`.`name`
AND `o`.`firstname` = `k`.`firstname`
详细了解不同的联接类型:http://www.sql-join.com/sql-join-types/
(图片由该网站提供,其中还包含一个示例和讨论,几乎就是您要做的事情!)
顺便说一下,您必须错过手册中有关使用已弃用(现已删除)mysql_*
函数的massive red warning banner。你应该停止这样做!请改用MySQLi或PDO。
答案 1 :(得分:-2)
较短的
SELECT DISTINCT k.*, IF(o.namee IS NULL, 'no', 'yes') purchased
FROM
wccrm_customers AS k
LEFT JOIN wccrm_orders AS o USING (namee,firstname)