我们在主MySQL表(命名对象)中添加了两列,一列表示数量,一列表示单位ID。如果数量和/或单位未知,则这些列设置为 NULL。
我们希望将此表与单位类型表联接在一起,以显示单位的名称(磅、页、克等)。
当我在MYSQL的命令行客户端中运行选择时,它返回预期的结果。当我的 PHP 页面运行查询时,第一行显示来自联接错误端的值。
示例:要连接的表是具有这些定义的对象和单位类型
mysql> show create table objects;
CREATE TABLE `objects` (
`objId` int NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`description` varchar(250) DEFAULT NULL,
`quantity` int DEFAULT NULL,
`unitid` int DEFAULT NULL,
`create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modify_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`objId`),
KEY `unitid` (`unitid`),
CONSTRAINT `objects_ibfk_1` FOREIGN KEY (`unitid`) REFERENCES `unittypes` (`unitId`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4735 DEFAULT CHARSET=utf8
和:
mysql> show create table unittypes;
CREATE TABLE `unittypes` (
`unitId` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`description` varchar(50) DEFAULT NULL,
`create_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`modify_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`unitId`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
示例行:
Unittypes:
+--------+------+--------------+-
| unitId | name | description |
+--------+------+--------------+-
| 1 | Each | Each |
Objects:
+-------+---------------------------------------+-------------+----------+--------+
| objId | NAME | description | quantity | unitid |
+-------+---------------------------------------+-------------+----------+--------+
| 1018 | UNKNOWN cables | NULL | NULL | NULL |
| 3466 | UNKNOWN replies | NULL | NULL | NULL |
结果集有 3 行。
单位类型没有匹配行时的示例:
我使用连接语法得到相同的结果
左连接单元类型 u on o.unitid = u.单元 id
我希望相同的查询在两个示例中的行为方式相同。我本来会猜测命令行和PHP只是将字符串传递给mySQL进行处理,但显然我没有看到一些差异。
PHP如何传递查询有什么奇怪的事情吗?MYsql是否无法正确处理通过该接口的连接;代码是否错误(无需连接即可工作)?
PIPIONE