0

フィールド名を共有する 2 つのテーブルを結合するクエリがあります。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_arrayまたはによって返される連想配列はmysql_fetch_assoc、キーにテーブル名を含みません。フィールド名だけ。テーブルの列は、テーブルicの列の後に取得されるためi、上書きされます。他のユーザーと名前を共有する列には、一意のエイリアスを設定する必要があります。

于 2012-11-06T12:54:24.577 に答える
0

$row['i.id'] は機能しません。テーブル名/エイリアスは、クエリからの出力には含まれません。異なるテーブルに同じ名前の列が 2 つある場合は、列を個別に指定し、クエリ内でエイリアスを設定する必要があります。すなわち:

$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 '%%'- これは基本的に You を省略した場合と同じです...

次に、PHPで次のようにします:

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