【问题标题】:Wrong data taken from the mySQL DB using mysql_fetch_assoc使用 mysql_fetch_assoc 从 mySQL DB 获取的错误数据
【发布时间】:2020-06-02 18:46:14
【问题描述】:

通过以下查询,我从不同的表中获取数据,并且几乎所有表都有 id 字段。

SELECT * FROM contracts AS co JOIN clients AS cl ON cl.id = co.client_id JOIN shops AS pv ON pv.id = co.shop_id

表结构: 合同(id、client_id、shop_id、报价、价格...)

客户(身份证、姓名、姓氏..)

商店(ID、代码、地址...)

现在,我正在使用 mysql_fetch_assoc 将数据打印到表中。除了表格合同的 id 之外,所有字段都正确打印。下面是简化的 PHP 代码:

$query = mysql_query ($sql) or die (mysql_error());
while($row = mysql_fetch_assoc($query)){ echo $row["id"]; }

奇怪的是,ID 被打印出来但不是正确的。如果我尝试使用“co.id”,它根本不起作用。我知道这段代码已被弃用,但我正在对旧项目进行一些更新,现在无法重构整个项目。

问题是:有没有办法定义我想要的 id?我会避免在 SELECT 替换 * 中定义我需要的所有字段。

【问题讨论】:

  • 问题是您使用* - stackoverflow.com/questions/17715049/… 提供了一些想法(不使用mysql_fetch_assoc() 是其中之一)。
  • 您必须至少定义几个字段。你可以做co.id AS co_id,cl.id AS cl_id, *
  • 嗨@aynber,我在执行“co.id AS co_id,cl.id AS cl_id, *”时收到错误消息。

标签: php mysql join


【解决方案1】:

我建议您在查询中提及每个字段而不是查询。 字段别名可以用来选择更合适的名称,也可以跳过重复的字段,如client_id & shop_id。

以下查询将用于相同的查询。

SELECT 
co.id AS contract_id, co.client_id, co.shop_id, co.offer, co.price,
cl.name, cl.surname,
pv.code, pv.address
FROM contracts AS co 
JOIN clients AS cl ON cl.id = co.client_id 
JOIN shops AS pv ON pv.id = co.shop_id;

请注意,co.id 将在查询结果中显示为 contract_id

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 2014-12-25
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多