PHP / MYSQL连接数组中的字段名称

时间:2012-11-06 12:48:30

标签: php mysql sql join

我有一个连接两个共享字段名称的表的查询。在使用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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

$ row ['i.id']不起作用。表名/别名不包含在查询的输出中。如果在不同的表中有两个具有相同名称的列,则需要单独指定列,并在查询中对它们进行别名。即:

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

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

答案 2 :(得分: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.
}

答案 3 :(得分: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'];