【发布时间】:2016-05-28 07:37:42
【问题描述】:
我在做一个查询,即:
SELECT
`Transaction`.`id`,
`Transaction`.`total`,
`Transaction`.`customer_id`,
`Customer`.`id`,
`Customer`.`full_name`
FROM
`mydb`.`transactions` AS `Transaction`
LEFT JOIN `mydb`.`users` AS `Customer` ON (
`Transaction`.`customer_id` = `Customer`.`id`
)
WHERE
`Transaction`.`customer_id` = '573edc-fa84-44a2-9bce-0d650ab724ab'
LIMIT 1
看下面的结果(不正确):
在 Transactions 表中,“customer_id”字段是一个 varchar(255) 字段,而在“users”表中,id 字段是一个 integer(11) 字段。我需要保留 customer_id 字段 varchar,因为它应该为来宾用户存储一个 36 个字符长的随机字符串。在此查询中,它将 customer_id 视为整数,因此截断整数值之后的所有内容,并将其与实际用户 ID 573 匹配。
当我像这样进行连接时,它匹配用户 ID 为 573 的记录。我不确定我应该怎么做才能正确匹配记录。在这种情况下,实际上应该没有记录在用户表中,因为它是由访客用户在没有登录的情况下完成的交易。
这里有什么工作?我不会将用户 ID 字段更改为 varchar 或将 customer_id 更改为整数,但仍想做正确的匹配。
我正在研究 CakePHP,但我认为这并不重要,因为当我直接在 phpmyadmin 中运行它时,它会给出相同的结果。
【问题讨论】:
-
当然它******没有。
-
有什么解决方法吗?无论如何,谢谢你投票!!
-
解决方法是什么?使用相同的数据类型存储对应的键。
-
我不能。这是一个相当大的系统,有几十个网站使用相同的结构,并与各个数据库共享代码。但我需要一个修复程序,它可以一次修复所有网站中的这个错误。客户 ID 和用户 ID 正在多个地方使用,因此无法替换它们。
-
这里没有错误。只是 dba 的设计存在严重缺陷。
标签: mysql join integer left-join varchar