2011-08-04 43 views
0

我运行一个SELECT查询,它已A.ID和c.id像这样:MySQL的SELECT瓦特/,两条AS ID字段名称中使用PHP而mysql_fetch_array(),以确定他们唯一

$sql = " 
(SELECT 
a.id, 
a.Title, 
a.Category, 
c.id, 
c.cateName FROM ads_list 
AS a LEFT JOIN ads_cate 
AS c ON c.id=a.Category WHERE a.Category = $CatID)"; // $CatID is defined earlier in  the script but is not pertinent to this problem. 

$result = mysql_query($sql) or die(mysql_error()); 

while ($row = mysql_fetch_assoc($result)) { echo $row['id'] // equals c.id } 

但$行['id']是查询中调用的最后一个id,并且计算为c.id.我需要在while循环中获取a.id。

我的问题是我如何在我的while()循环中唯一获取a.id和c.id的值?

+1

这是一个很好的例子,说明为什么在每个表中将主键'id'命名不好。 –

+0

比尔,谢谢你的提示。 – OldWest

+1

我都叫做id,使用别名有多难(不是很好) – 2011-08-04 22:14:28

回答

3

c.id列指定别名。

试试这个:

$sql = " 
(SELECT 
a.id, 
a.Title, 
a.Category, 
c.id AS c_id, 
c.cateName FROM ads_list 
AS a LEFT JOIN ads_cate 
AS c ON c.id=a.Category WHERE a.Category = $CatID)"; 


$result = mysql_query($sql) or die(mysql_error()); 

while ($row = mysql_fetch_assoc($result)) { 
echo $row['id']; 
echo $row['c_id']; 
} 
2
$sql = " 
(SELECT 
a.id as AID, 
a.Title, 
a.Category, 
c.id as CID, 
c.cateName FROM ads_list 
AS a LEFT JOIN ads_cate 
AS c ON c.id=a.Category WHERE a.Category = $CatID)"; 
2
SELECT 
    a.id AS aid, 
    a.Title 
    a.Category 
    c.id AS cid, 
    c.cateName 
FROM ads_list a 
    LEFT JOIN ads_cate c ON c.id=a.Category WHERE a.Category = $CatID) 

玩得开心

1

您可以将您的查询更改为类似:

SELECT 
a.id as a_id, 
a.Title, 
a.Category, 
c.id as c_id, 
c.cateName FROM ads_list 
AS a LEFT JOIN ads_cate 
AS c ON c.id=a.Category WHERE a.Category = $CatID 

这种方式存在的列名和你没有歧义可以以$ row ['a_id']或$ row ['c_id']的形式访问它]

2

你有两个选择:

1-给每个ID的别名:

SELECT 
a.id AS aid, 
a.Title, 
a.Category, 
c.id AS cid, 
... 

,并将它们作为$行[ '援助']和$行[ 'CID'。使用mysql_fetch_row()而不是mysql_fetch_assoc()并将它们定位为$ row [0]和$ row [3]。

1

难道你不能从查询中删除c.id吗?你并不需要一个SELECT语句中,如果您需要在您的查询:

$sql = "SELECT a.id, a.Title, a.Category, c.cateName 
FROM ads_list AS a 
LEFT JOIN ads_cate AS c ON c.id=a.Category 
WHERE a.Category = $CatID"; 

$result = mysql_query($sql) or die(mysql_error()); 

while ($row = mysql_fetch_assoc($result)) { echo $row['id'] // equals c.id } 

如果你需要它虽然,你也可以使用PDO和值绑定。我不推荐使用mysql_ *函数。 PDO是只求更好,更易于阅读:

$query = $pdo->query('SELECT a.id, a.Title, a.Category, c.id, c.cateName 
           FROM ads_list AS a 
           LEFT JOIN ads_cate AS c ON c.id=a.Category 
           WHERE a.Category = $CatID'); 

    $query->bindColumn(1, $id_a); //numerical index goes from 1 
    $query->bindColumn(4, $id_b); 
    $query->bindColumn('Title', $title); //you can also index using column name if it's possible 

    while ($query->fetch(PDO::FETCH_BOUND)) //fetch returns true if there are any records to fetch 
    { 
    echo $id_a; 
    echo $id_b; 
    echo $title; 
    } 

下行这种解决方案(以及和mysql_fetch_row)的是,在查询中的任何改变可能会导致指数的变化。即使现在不是问题,相信我 - 我已经看到一个包含30个返回列和mysql_fetch_row的查询。这是一场噩梦。不可能找出数据库中的哪一列是由某个变量表示的。

+0

感谢您的详细解释。 – OldWest

相关问题