Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 特定sql查询问题_Mysql - Fatal编程技术网

Mysql 特定sql查询问题

Mysql 特定sql查询问题,mysql,Mysql,我写这个问题有困难。我有两个表格,投票表格和点击表格。在投票表中,我有两个字段,id和date。日期格式为“12/30/11:14:28:36”。在click_表中,我有两个字段,id和date。日期格式为“12.30.11” id在两个表中都出现多次。我想做的是生成一个包含3个字段的结果:id、投票、单击。id列应该有不同的id值,投票列应该有投票表中id的日期为12/30/11%的总次数,点击应该有点击表中id的日期为12.30.11的总次数,如下所示: ID | VOTES | CLICK

我写这个问题有困难。我有两个表格,投票表格和点击表格。在投票表中,我有两个字段,id和date。日期格式为“12/30/11:14:28:36”。在click_表中,我有两个字段,id和date。日期格式为“12.30.11”

id在两个表中都出现多次。我想做的是生成一个包含3个字段的结果:id、投票、单击。id列应该有不同的id值,投票列应该有投票表中id的日期为12/30/11%的总次数,点击应该有点击表中id的日期为12.30.11的总次数,如下所示:

ID | VOTES | CLICKS

001 | 24  |  50

002  |  30  |  45

假设“date”列的类型实际上是date或DATETIME(而不是VARCHAR),那么所需的操作相当简单:

SELECT v.id, v.votes, c.clicks
  FROM (SELECT id, COUNT(*) AS votes
          FROM vote_table AS v1
         WHERE DATE(v1.`date`) = TIMESTAMP('2011-12-30')
         GROUP BY v1.id) AS v
  JOIN (SELECT id, COUNT(*) AS clicks
          FROM click_table AS c1
         WHERE DATE(c1.`date`) = TIMESTAMP('2011-12-30')
         GROUP BY c1.id) AS c
    ON v.id = c.id
 ORDER BY v.id;
请注意,这仅显示在给定日期至少有一次投票和至少一次单击的ID值。如果您需要查看所有投票或单击的ID值,或者两者都需要,那么您必须做更多的工作


如果因为日期是VARCHAR列而必须对其进行规范化,则WHERE子句相应地变得更复杂。

这里的每个人都这样吗pretentious@JonathanLeffler那句话有点恶意。这似乎有点不必要。这是一个人们来寻求帮助的地方,他们不知道什么更好。得体点,或者不要评论。可能不会。但是你没有告诉我们关于你桌子的一些重要细节。对日期值使用VARCHAR是一个严重的问题。问题是糟糕的设计使得帮助人们变得更加困难。重新表述:为什么日期格式不一致?这些字段的基本类型是什么?我得到这个错误:“id”列不能为null。我认为有两个id字段是空的,但有一个快速修复吗?我刚刚添加了缺少的GROUPBY子句。确保每个表上都有一个主键;确保列上没有空约束。在更改表之前删除行“WHERE id IS NULL”,以防止问题重复。在每一列上始终包含“NOTNULL”约束,除非您有特定的理由允许该列为空。我运行了它,它运行成功,但没有返回任何内容。不确定这是否重要,但id字段不是主字段,也不是唯一字段。有多个ID。。。所以如果ID001今天投票3次,将会有3行写着001,2011-12-30。我试图计算两个表中每个id的所有值。实际上,即使表中有重复的条目,代码或多或少也应该可以工作。但是,如前所述,它可能只在类型为DATE或DATETIME(或TIMESTAMP)时才起作用。如果它们是VARCHAR,那么你必须重写条件,我觉得太懒了,不能为你这么做。你应该有一些东西使每次点击和每次投票都是独一无二的——点击或投票的内容,可能还有一个1秒或更精确的时间戳。我怀疑您没有获得任何数据,因为一个或两个子查询的转换失败,导致您将NULL与日期进行比较。若要隔离问题,请单独运行子查询并查看它们生成的日期(如果有)。如果它们没有生成任何内容,则需要将WHERE子句扭曲成适合您的数据的形状。当两个子查询都独立工作时,您可以或多或少地组合它们,如图所示。