0

我有一个查询连接两个共享字段名称的表。在使用 fetch_array 将结果转换为数组后,我想获取一个的字段名称,而不是另一个。

我觉得我已经用一个简单的别名完成了很多次,但这次它不起作用。谁能帮我找出错误。非常感谢。

代码是:

$sql = "SELECT i.*,ic.* FROM `items` i 
  LEFT JOIN `itemcat` ic ON i.id= ic.itemid 
  WHERE (shortdescript LIKE '%%' OR longdescript LIKE '%%') 
    AND ic.catid='23' limit 0,20 ";

$res = mysql_query($sql) or die(mysql_error());  //query executes no problem
while($row = mysql_fetch_array($res)) {
$id = $row['i.id'];//I do not understand why this is not getting anything.
$id2 = $row['id'];//returns id but from wrong table.

echo $id; //returns blank.  
echo $id2; //returns id of itemcat table when I want id of items table.
}
4

4 回答 4

2

返回的关联数组mysql_fetch_arraymysql_fetch_assoc不包含键中的表名;只是字段名称。由于在表ic中的列之后检索表中的列,i因此它们会覆盖它们。您应该在与其他人共享名称的任何列上设置唯一别名。

于 2012-11-06T12:54:24.577 回答
0

$row['i.id'] 将不起作用。表名/别名不包含在查询的输出中。如果在不同的表中有两个同名的列,则需要单独指定列,并在查询中为它们设置别名。IE:

$sql = "SELECT i.id as i_id, i.other_field, i.another_field, ic.id as ic_id, ic.my_other_field, ... ";

然后,您可以通过别名引用 $row 数组中的这些字段。

于 2012-11-06T12:54:27.213 回答
0

尝试

$sql = "SELECT i.*, i.id as firstid, ic.id as secondid, ic.* FROM `items` i LEFT JOIN `itemcat` ic ON i.id= ic.itemid WHERE (shortdescript LIKE '%%' OR longdescript LIKE '%%') AND ic.catid='23' limit 0,20 ";

$res = mysql_query($sql) or die(mysql_error());  //query executes no problem
while($row = mysql_fetch_array($res)) {
$id = $row['firstid']; // id for 'items' table.
$id2 = $row['secondid']; // id for 'itemcat' table.


echo $id; //returns blank.  
echo $id2; //returns id of itemcat table when I want id of items table.
}
于 2012-11-06T12:54:56.103 回答
0

您必须指定id要获取的列,这意味着:

SELECT i.*,ic.*, i.id FROM `items` i 
LEFT JOIN `itemcat` ic ON i.id= ic.itemid 
WHERE (shortdescript LIKE '%%' OR longdescript LIKE '%%') 
AND ic.catid='23' limit 0,20

我不明白这个条件shortdescript LIKE '%%' OR longdescript LIKE '%%'- 这与你省略它基本相同......

然后在 PHP 中做:

$id = $row['id'];
于 2012-11-06T12:55:36.620 回答