mysql_fetch_assoc vs iterative mysql_fetch_row& mysql_fetch_column

时间:2013-04-30 13:47:40

标签: php mysql multiple-tables

我正在处理一个活动记录类,用于从可以包含联接的数据库中获取记录。

现在,在我的测试中,我有一些具有包含不同值的常用列名的数据,但是当我执行mysql_fetch_assoc函数时,它只返回一个公共名称的列,并且可以松散剩下的数据。所以,我打算用两个循环替换mysql_fetch_assoc,第一个用来获取列名(使用mysql_fetch_column),第二个用于获取数据(通过有两个循环,一个嵌套在另外,它将获取所有数据,然后将它们放在一个返回的数组中,该数组将包含列名及其父表引用(或者如果JOIN具有AS语法)。

但是我担心这可能效率不高,并且可能花费相当多的处理时间,所以有人可以澄清两种方法的效率,或者是否有像mysql_fetch_assoc这样的函数会先于列的表引用?

其他

虽然这是使用PHP的mysql库,但我正在考虑将来扩展库以通过PDO驱动,但我将使用与上面类似的方法(通过使用getColumnMeta

2 个答案:

答案 0 :(得分:2)

首先关闭:标准“mysql_正被删除,请改用mysqli_”警告。

第二:很难说没有看到你当前的代码,但就原始sql而言,你可以简单地重命名列。因此,如果您有表users和表contacts,则可以执行以下操作:

select a.id, a.firstname as myfirstname, a.lastname as mylastname, 
    b.id, b.firstname, b.lastname 
from users a, contacts b 
where a.id=b.userid;

答案 1 :(得分:2)

真实问题的常见解决方案(不是您提出的XY问题)是为“常用”字段名称提供别名:

SELECT goods.id as gid, categories id as cid ...

等等

但是,如果您使用第二种方法mysql_fetch_field()(实际上是指您的意思)和mysql_fetch_row()

,那几乎不会有问题