gpt4 book ai didi

javascript - 从 Access 到 MySQL 的 SQL 查询转换

转载 作者:行者123 更新时间:2023-11-29 02:58:27 28 4
gpt4 key购买 nike

我有一个使用本地机器数据库的 JavaScript/HTML 编写的应用程序。这是一个相当复杂的问题,但我现在只需要有关 SQL 查询的帮助。有关本地 JavaScript 数据库类的更多信息,请参见此处:JavaScript Access database class

数据由 3D 值和一个时间分量组成,因此数据库非常大,尽管我将数据从 200 个时间步长简化为 3 个以进行测试。有多个值描述 3D 模型,因此我使用下拉菜单访问不同的值。不幸的是,我没有可以向任何人展示的工作版本,因为它只能在本地机器上工作。我正在尝试将此版本转换为运行 MySQL 的 Web 式数据库驱动演示。我在 FatCow 主持,如果你认识他们,你就会知道他们有一个 php 驱动的 MySQL 界面。

数据设置

数据的设置方式,我有几个描述3D数据表的列如下所述。这是一个名为“dat”的表:

  • 单元格(矩阵中该单元格的唯一编号)
  • XVal(这是矩阵中的X位置)
  • YVal(这是矩阵中的 Y 位置)
  • 提升(这是矩阵中的 Z 位置)
  • Oct-97(这是具有值的三个时间组件之一)
  • Oct-07(这是具有值的三个时间组件之一)
  • Oct-17(这是具有值的三个时间组件之一)

有几个表被调用来制作网格,但我们现在只关注“dat”表

有些数据表的设置与引用 XVal 和 YVal 类似,但有些仅引用唯一的 Cell 值。对于当前的应用程序,我获取大量数据并进行转换数据透视表以创建模型的网格。 3D 矩阵网格为 36x41x15。这些网格显示为:

  • XY平面图
  • XZ横截面
  • YZ横截面

我对在我的本地应用程序中工作的每个网格都有三个 SQL 查询,但这些在 MySQL 中不起作用。请记住,我正在自学如何做这些事情,所以我有点缺乏经验。如果这是一个明显的错误,请不要杀了我。

适用于本地应用程序的 SQL 查询

对于上述三个查询,以下是有效的:

  • XY 网格:TRANSFORM ROUND(max(dat.[Oct-07]) *100,2) SELECT dat.Yval FROM dat WHERE (((dat.Lift)=7)) GROUP BY dat.Yval ORDER BY dat.Yval DESC , dat.Xval PIVOT dat.Xval;

  • XZ 网格:TRANSFORM ROUND(max(dat.[Oct-07]) *100,2) SELECT dat.Lift FROM dat WHERE (((dat.Yval)=20)) GROUP BY dat.Lift, dat.Yval ORDER BY dat.Lift DESC PIVOT dat.Xval;

  • YZgrid: TRANSFORM ROUND(max(dat.[Oct-07]) *100,2) 从 dat WHERE (((dat.Xval)=20)) GROUP BY dat 选择 dat.Lift .Lift ORDER BY dat.Lift DESC , dat.Yval DESC PIVOT dat.Yval;

应用程序调用显示所需的 XVal、YVal 或 Lift。因此,在 XY 网格中,[Oct-07] 和 dat.Lift(从 1 到 15 的数字)一样是查询中的一个变量。

与其他两个网格类似,[Oct-07] 是查询中的一个变量,分别是 dat.YVal 或 dat.XVal。

将数据导入 MySQL 后,我尝试运行这些查询,但它们给出了错误:

MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRANSFORM ROUND( max( dat . [ Oct - 07 ] ) * 100 , 2 ) SELECT dat . Yval FROM da' at line 1

我使用 ROUND(MAX(... 返回列的每个值并修复小数点。

我认为问题出在 TRANSFORM 语句中,但我不确定如何转换它并获得相同的结果。

问题是,如何将这三个查询从基于 MS Access 的查询转换为基于 MySQL 的查询?

感谢您的帮助和见解

最佳答案

MySQL 中没有TRANSFORMTRANSFORM 实际上只是一个别名,因此 MS Access 将为您完成创建“交叉表”查询的工作,并且您可以使用更少的代码。而是使用 ANSI SQL 方式。

http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=25

ANSI SQL 交叉表查询示例:

Example ANSI-SQL Crosstab

SELECT
SUM(CASE WHEN purchase_date BETWEEN '2004-08-01' and '2004-08-31' THEN amount ELSE 0 END) As m2004_08,
SUM(CASE WHEN purchase_date BETWEEN '2004-09-01' and '2004-09-30' THEN amount ELSE 0 END) As m2004_09,
SUM(CASE WHEN purchase_date BETWEEN '2004-10-01' and '2004-10-31' THEN amount ELSE 0 END) As m2004_10,
SUM(amount) As Total
FROM purchases WHERE purchase_date BETWEEN '2004-08-01' AND '2004-10-31'

您可能需要使用 GROUP_CONCAT,如果您可以使用 stored procedures 将是最简单的

这里有一个关于在 MySQL 中创建交叉表查询的快速教程:http://www.databasejournal.com/features/mysql/article.php/3855376/All-About-the-Crosstab-Query.htm

关于javascript - 从 Access 到 MySQL 的 SQL 查询转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513252/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com