Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 仅当先购买了另一种产品时才能获得该产品?_Mysql_Sql - Fatal编程技术网

Mysql 仅当先购买了另一种产品时才能获得该产品?

Mysql 仅当先购买了另一种产品时才能获得该产品?,mysql,sql,Mysql,Sql,我在看,它让我想知道,当鼠标先于键盘购买时,您将如何从客户表中选择一个名称 我试过这样的方法,但没有成功 SELECT product_name, customer.name, date_of_sale FROM sales, product, customer WHERE STR_TO_DATE( ( SELECT date_of_sale FROM sal

我在看,它让我想知道,当鼠标先于键盘购买时,您将如何从客户表中选择一个名称

我试过这样的方法,但没有成功

SELECT 
    product_name, customer.name, date_of_sale 
    FROM sales, product, customer 
    WHERE 
        STR_TO_DATE(
            (
                SELECT date_of_sale 
                FROM sales 
                WHERE product_id = 2
            ),
        STR_TO_DATE('2012-12-23 18:00:00') 

        > 

        STR_TO_DATE(
            (
                SELECT date_of_sale 
                FROM sales 
                WHERE product_id = 3
            ),
        STR_TO_DATE('2012-12-23 18:00:00') 

我可以想出两种方法

方法一是使用
一元联接
销售
销售
,然后到
客户

方法二是在
视图
(或
临时表
中加入客户的

SQLFiddle:

一元连接 我把所有的专栏都包括进来是为了提供信息

SELECT c.name,
       s1.product_id AS product1,
       s1.date_of_sale AS date1,
       s2.product_id AS product2,
       s2.date_of_sale AS date2
FROM sales s1,
     sales s2,
     customers c
WHERE s1.date_of_sale < s2.date_of_sale
  AND s1.customer_id = s2.customer_id AND
  c.customer_id = s1.customer_id and
  s1.product_id = 3 AND  s2.product_id = 2;
赞成/反对 康卡特集团:

  • 赞成:group_concat方法支持like中一行中的多个值,例如
    like“%3,2,10%”
  • 缺点:对于较小的产品表,速度较慢,并且使用内存中的临时表
加入:

  • 优点:对于较小的数据量,速度更快
  • CON:订单中+1个产品的联接中需要+1个销售表
  • 缺点:对于较大的数据量,速度可能较慢

截止日期('2012….:00')
毫无意义。mysql将接受任何看起来像
yyyy-mm-dd hh:mm:ss
的字符串作为有效的日期时间值。如果您的
date\u of\u sale
值已经是datetime值,那么它就更没有意义了。将日期转换为日期是多余的。很高兴知道,+1感谢您通知我,我认为我们需要销售、产品和客户描述表来真正帮助您。它将是多个连接-客户和销售(假设有一个col要连接)和产品销售(如果有公共col,同样如此)。祝你好运您打算说customer.name=xxxxxxx或@may建议的组在哪里?在
WHERE
中,第一个子句是非布尔的。这是如何运行的?最好用简单的英语解释您想要获得的数据。我们可以在链接中看到这些表。@ehime还将根据您的方法添加另一个可能更快的解决方案。
SELECT name
FROM customers,
  (SELECT customer_id,
          group_concat(PRODUCT_ID
                       ORDER BY date_of_sale)
   FROM sales
   GROUP BY customer_id HAVING group_concat(PRODUCT_ID
                                            ORDER BY date_of_sale) LIKE '%3,2%') sales_order
WHERE customers.customer_id = sales_order.customer_id;