【问题标题】:MySql Update query works, but not in phpMySql 更新查询有效,但在 php 中无效
【发布时间】:2012-10-03 13:34:01
【问题描述】:

当我将下面的 UPDATE Query 放入 Workbench 时,它工作得很好,但是当我尝试通过 php 运行它时,它什么也没做?有什么想法吗?

我尝试了 TURNOVERSCORE 的表结构,因为 varchar(100) 和 Float,table1.item 和 t2.item 是主键。

使用 mysql_error 时提供错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'UPDATE table1 JOIN (SELECT count(*) as cnt, ITEM FROM table2 WHERE' 附近使用正确的语法

$con = mysql_connect("localhost","username","pw");
$turnoverquery = "UPDATE table1 
JOIN (SELECT count(*) as cnt, item FROM table2 WHERE table2.TRANS_DATE BETWEEN DATE_SUB(CURDATE(), INTERVAL 365 DAY) AND CURDATE() GROUP BY item) t2 
ON table1.item = t2.item

SET table1.TURNOVERSCORE=CASE
WHEN t2.cnt/12 < 1 AND table1.CAT = 'E' THEN .05
WHEN t2.cnt/12 >= 1 AND t2.cnt/12 < 4 AND table1.CAT = 'E' THEN .5
WHEN (t2.cnt/12) >= 4 AND table1.CAT = 'E' THEN 1
WHEN (t2.cnt/12) <= 5 AND table1.CAT != 'E' THEN .05
WHEN (t2.cnt/12) >= 6 AND (t2.cnt/12) < 11 AND table1.CAT != 'E' THEN .25
WHEN (t2.cnt/12) >= 11 AND (t2.cnt/12) < 21 AND table1.CAT != 'E' THEN .5
WHEN (t2.cnt/12) >= 21 AND table1.CAT != 'E' THEN 1 END";

mysql_query($turnoverquery);

【问题讨论】:

  • mysql_error 返回什么?
  • 您的数据在工作台上是否正在更新,请您澄清一下,也请您将表格转储放在这里,以便我们为您提供帮助
  • 你至少放置了结构表
  • Workbench 中的数据更新成功
  • 你在选择数据库吗,请你把整个代码从你连接到执行的方式开始

标签: php mysql sql-update


【解决方案1】:

您的括号不匹配。您在子查询中有两次 GROUP BY ITEM)

【讨论】:

  • 谢谢你,我编辑了帖子,它实际上并没有在那里两次复制代码时出错。
  • 现在是出现在您的 PHP 中的 EXACT 查询吗?如果存在语法错误,并且您在复制时正在编辑,那么您可能在复制时正在修复它,所以我们看不到它。
  • 明白...这正是它在我的 PHP 中的显示方式。
  • 我明白了,我不得不将数据库添加到表名db.tabledb.table2
  • 这不应该导致语法错误,它应该抱怨“表'table1'不存在”。除非您的表名恰好是 SQL 关键字。但table1table2 不是关键字。
【解决方案2】:

php 查询要求我识别数据库,(当然)。在 Workbench 中,一旦选择了数据库,您就不需要将 db.tablename 添加到查询中,而如果您尚未使用连接字符串标识它,则必须在 php 中。

【讨论】:

    【解决方案3】:

    只是将我的评论转换为回答。

    执行前需要选择DB,或者在表名中添加database。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      相关资源
      最近更新 更多