mysql - WHERE 查询中的字符串

标签 mysql coldfusion

所以我有这个问题让我很头疼。如果有人能帮我解决这个问题,我将不胜感激。

我将 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/

相关文章:

coldfusion - 在 CFBuilder 中创建服务器后 RDS 发生故障

iis-7 - 使用 web 配置从 url 中删除 index.cfm

mysql - 如何根据与另一个表的联接从表中删除行?

mysql - 如何从列日期格式获取特定的日月或年

mysql - 当新客户与回访客户 SQL 中的日期范围发生更改时删除重复项

java - ColdFusion 8 读取大型 Excel 文件

coldfusion - 在 Transfer ORM (Coldfusion) 中将属性添加到多对多连接

mysql - 集合作为 SQL 中的数据类型

mysql - 使用按位操作数在 MySQL 表中查找共享列表 ID

javascript - 如何在页面加载缓慢时显示加载图像