猿问

我的我的左联接在 PHP 页面中首先返回错误,但在 MYSQL 命令行中返回正确的结果

我们在主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是否无法正确处理通过该接口的连接;代码是否错误(无需连接即可工作)?


慕哥6287543
浏览 101回答 1
1回答

PIPIONE

您有两个名为 的列。第二个将覆盖第一个。name您应将它们别名为具有不同的名称。select `o`.`name` as `o_name` ...在你的情况下,只有第一行受到影响的原因是因为你用来获取它,但随后又得到其他行(并且有效,因为它完全忽略了列名)fetch_assocfetch_rowfetch_row
随时随地看视频慕课网APP
我要回答