PHP,MYSQL:在一段时间内选择循环?

时间:2018-02-25 11:52:06

标签: php mysql join

我正在请求您对以下内容的建议:

我有两张桌子:

客户和订单。

我使用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

2 个答案:

答案 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`

Inner join venn diagram Left join venn diagram

详细了解不同的联接类型:http://www.sql-join.com/sql-join-types/

(图片由该网站提供,其中还包含一个示例和讨论,几乎就是您要做的事情!)

顺便说一下,您必须错过手册中有关使用已弃用(现已删除)mysql_*函数的massive red warning banner。你应该停止这样做!请改用MySQLiPDO

答案 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)