所以我有这个问题让我很头疼。如果有人能帮我解决这个问题,我将不胜感激。
我将 Coldfusion 与 MSSQL 和 MySQL 一起使用。 MSSQL 数据库是我现在正在处理的这个应用程序的主要数据源。而 MySQL 用于员工数据库(创建它是为了用 PHP 开发员工数据库)。我必须连接到它才能使该应用程序正常工作。
MySQL 表:
TBL_员工
+---------+------------------+-------------------|
|EMP_ID | EMP_NUMBER | DATE_OF_BIRTH |
+---------+------------------+-------------------|
| 1 | 00001 | 2009-01-01 |
| 2 | 00002 | 2009-01-15 |
| 3 | TEMP01 | 2009-05-10 |
| 4 | TEMP02 | 2010-02-04 |
| 5 | 0006 | 2010-03-01 |
+---------+------------------+-------------------|
TBL_CHILD
+---------+------------------+---------------------|
|EMP_ID | CHILD_ID | DATE_OF_BIRTH |
+---------+------------------+---------------------|
| 1 | 1 | 2008-11-12 |
| 1 | 2 | 2010-10-06 |
| 2 | 3 | 2009-05-10 |
| 5 | 4 | 2010-02-16 |
| 5 | 5 | 2012-03-08 |
+---------+------------------+---------------------|
此应用程序将检查员工的出生日期。如果他有 child ,系统将显示他最大 child 的出生日期。否则(如果他没有 child )系统将显示他自己的出生日期。
问题是:
<cfquery name="getEmployee" datasource="#mysqlDB#">
SELECT EMP_ID,EMP_NUMBER,DATE_OF_BIRTH
FROM TBL_EMPLOYEE
WHERE EMP_NUMBER = '#users.EMP_NO[mainRow]#'
</cfquery>
<cfset mysql_id = getEmployee.EMP_ID>
<cfquery name="getChild" datasource="#mysqlDB#">
SELECT *
FROM TBL_CHILD
WHERE EMP_ID =#mysql_id#
ORDER BY DATE_OF_BIRTH ASC
LIMIT 1
</cfquery>
Note :
#users.EMP_NO[mainRow]# --> loop query from MSSQL
EMP_NUMBER = string
EMP_ID = integer (auto)
当员工编号为数字(即:001、101、23002 等)时,此查询有效 (没有''符号)
<cfquery name="getEmployee" datasource="#mysqlDB#">
SELECT *
FROM TBL_EMPLOYEE
WHERE EMP_NUMBER = #users.EMP_NO[mainRow]#
</cfquery>
<cfset mysql_id = getEmployee.EMP_ID>
<cfquery name="getChild" datasource="#mysqlDB#">
SELECT *
FROM TBL_CHILD
WHERE EMP_ID =#mysql_id#
</cfquery>
但当员工编号为字符(TEMP101、TEMP007 等)时,它会给我错误。
'#users.EMP_NO[mainRow]#'
我曾尝试在 phpmyadmin 中使用相同的查询,它工作得很好。谁能告诉我为什么会这样以及如何解决这个问题?
(根据评论更新) 错误信息是:
Error Executing Database Query. 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 '' at line 3 SELECT * FROM TBL_CHILD WHERE EMP_ID =
最佳答案
应该联合这些 mySQL 查询,而不是为每个员工访问数据库两次。它将解决导致错误的第二个查询,那么您只需要担心此查询返回 0 个结果即可。
有点像
<cfquery name="getEmployee" datasource="#mysqlDB#">
SELECT
[only the columns you need from both tables]
FROM
TBL_EMPLOYEE
inner join tbl_child on tbl_employee.emp_id = tbl_child.emp_id
WHERE
tbl_employee.EMP_NUMBER = <cfqueryparam cfsqltype="cf_sql_varchar" value="#users.EMP_NO[mainRow]#">
</cfquery>
您还可以使用 in
WHERE
tbl_employee.EMP_NUMBER in (<cfqueryparam cfsqltype="cf_sql_varchar" value="#valueList(users.EMP_NO)#" list="yes">)
关于mysql - WHERE 查询中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13969134/