使用匹配的列名连接PHP mySQL
注意到一个相当大的问题。当我将两个表连接在一起时,两个表中都有一个名为ID的列,这一事实会导致以后在PHP等式中使用错误的表ID 简单的解决方案是更改列名,但考虑到数据库也有其他标准,包括每个表中名为name的列以及其中许多表中的标题 有没有办法解决这个问题,或者我应该重命名整个数据库以确保没有重复的列 代码仅供参考使用匹配的列名连接PHP mySQL,php,mysql,duplicates,Php,Mysql,Duplicates,注意到一个相当大的问题。当我将两个表连接在一起时,两个表中都有一个名为ID的列,这一事实会导致以后在PHP等式中使用错误的表ID 简单的解决方案是更改列名,但考虑到数据库也有其他标准,包括每个表中名为name的列以及其中许多表中的标题 有没有办法解决这个问题,或者我应该重命名整个数据库以确保没有重复的列 代码仅供参考 $criteria = "SELECT * FROM voting_intention,electors WHERE voting_intention.elector =
$criteria = "SELECT *
FROM voting_intention,electors
WHERE voting_intention.elector = electors.ID
AND electors.postal_vote = 1
AND voting_intention.date = (select MAX(date)
from voting_intention vote2
where voting_intention.elector = vote2.elector)
AND electors.telephone > 0"
function get_elector_phone($criteria){
$the_elector = mysql_query("SELECT * $criteria"); while($row = mysql_fetch_array($the_elector)) {
return $row['ID']; }
mysql_fetch_row将以数字数组的形式获取数据mysql_fetch_row将以数字数组的形式获取数据我编写此函数是为了帮助实现这一点。基本上,它将表名前置到关联数组的字段名
while($row = mysql_fetch_array($the_elector))
{
return $row['ID'];
}
将成为
while($row = mysql_fetch_table_assoc($the_elector))
{
return $row['voting_intention.ID'];
}
功能:
function mysql_fetch_table_assoc($resource)
{
// function to get all data from a query, without over-writing the same field
// by using the table name and the field name as the index
// get data first
$data=mysql_fetch_row($resource);
if(!$data) return $data; // end of data
// get field info
$fields=array();
$index=0;
$num_fields=mysql_num_fields($resource);
while($index<$num_fields)
{
$meta=mysql_fetch_field($resource, $index);
if(!$meta)
{
// if no field info then just use index number by default
$fields[$index]=$index;
}
else
{
$fields[$index]='';
// deal with field aliases - ie no table name ( SELECT T_1.a AS temp, 3 AS bob )
if(!empty($meta->table)) $fields[$index]=$meta->table.'.';
// deal with raw data - ie no field name ( SELECT 1, MAX(index) )
if(!empty($meta->name)) $fields[$index].=$meta->name; else $fields[$index].=$index;
}
$index++;
}
$assoc_data=array_combine($fields, $data);
return $assoc_data;
}
?>
我编写这个函数是为了帮助实现这一点。基本上,它将表名前置到关联数组的字段名
while($row = mysql_fetch_array($the_elector))
{
return $row['ID'];
}
将成为
while($row = mysql_fetch_table_assoc($the_elector))
{
return $row['voting_intention.ID'];
}
功能:
function mysql_fetch_table_assoc($resource)
{
// function to get all data from a query, without over-writing the same field
// by using the table name and the field name as the index
// get data first
$data=mysql_fetch_row($resource);
if(!$data) return $data; // end of data
// get field info
$fields=array();
$index=0;
$num_fields=mysql_num_fields($resource);
while($index<$num_fields)
{
$meta=mysql_fetch_field($resource, $index);
if(!$meta)
{
// if no field info then just use index number by default
$fields[$index]=$index;
}
else
{
$fields[$index]='';
// deal with field aliases - ie no table name ( SELECT T_1.a AS temp, 3 AS bob )
if(!empty($meta->table)) $fields[$index]=$meta->table.'.';
// deal with raw data - ie no field name ( SELECT 1, MAX(index) )
if(!empty($meta->name)) $fields[$index].=$meta->name; else $fields[$index].=$index;
}
$index++;
}
$assoc_data=array_combine($fields, $data);
return $assoc_data;
}
?>
虽然Gunnx解决方案是完全可以接受的,但我想提出一个替代方案,因为您似乎只使用结果的ID列
SELECT
electors.ID
FROM
voting_intention,electors
....
虽然Gunnx解决方案是完全可以接受的,但我想提出一个替代方案,因为您似乎只使用结果的ID列
SELECT
electors.ID
FROM
voting_intention,electors
....
使用AS命令重命名列,例如选择electors.id作为eid,投票意愿.id作为vid,…。使用AS命令重命名列,例如选择electors.id作为eid,投票意愿.id作为vid,。。。。