我有一个连接两个共享字段名称的表的查询。在使用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.
}
答案 0 :(得分:2)
mysql_fetch_array
或mysql_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'];