【问题标题】:php/mysql/ajax join in query and accessing resulting variablesphp/mysql/ajax 加入查询并访问结果变量
【发布时间】:2012-07-10 13:22:15
【问题描述】:

我有一个连接两个表的 mysql 数据库的查询。在第一个表中,它只是根据 id 提取记录。对于第二个表,可能有也可能没有基于第一个表中的值的匹配项。如果有任何匹配项,我想获取匹配项,否则,可能结果记录集的那些值是空的。

查询似乎产生了正确数量的记录。但是,当我尝试访问一些应该存在的变量的值时,我什么也得不到,要么是因为我可能将它们称为错误的名称,要么它们以某种方式不在记录集中。我对 mysql 查询有点模糊,所以非常感谢任何建议..

表 1 公园

id | name | stateid 

表 2 参观过的公园

id | visited | parkid | userid

PHP 脚本

$sql = "SELECT * 
FROM `parks` p
LEFT JOIN `parksvisited` pv
ON p.id = pv.parkid
WHERE p.stateid = '44'"

运行查询...

while($row = mysql_fetch_array($res))
{
if ($row['visited'] == 1) {
$visited = 1; }  
else {
$visited = 0; }
<a href="javascript:void(0);" onclick="loadParks(\''.$row['stateid'].'\',\''.$row['p.id'].'\',\''.$visited.'\');">Visited</a>

}

基本上,我得到了 stateid,但我没有得到 p.id 或访问过。可能是我将它们命名错误,或者它们可能以某种方式被排除在结果之外......感谢您的任何建议。

【问题讨论】:

  • 首先在 phpmyadmin 中测试查询,看看你得到了什么,否则 var_dump ($row)
  • 我已经这样做了,id 字段似乎在那里,但是,它没有显示,因为我在 html 中引用了它
  • 是否有替代 var_dump 来查看正在输出的字段..
  • 你可以在某处做echo '&lt;pre&gt;';print_r(mysql_fetch_array($res));exit;。不过请看我的回答。

标签: php mysql ajax join


【解决方案1】:

p.id 可能丢失了,因为p.idpv.id 都将返回为id,而不是p.idpv.id。试试这个:

SELECT p.id pid,
       p.*,
       pv.id pvid,
       pv.*
FROM `parks` p
LEFT JOIN `parksvisited` pv
ON p.id = pv.parkid
WHERE p.stateid = '44'

您在原始查询中似乎也没有从pv 中选择任何内容,只是p。看看这个新查询是否也处理visited。并确保将pid 称为$row['pid'],而不是$row['p.id']

【讨论】:

  • 听起来不错。 row['p.name'] 没有返回任何内容。我应该在别名中添加一个 as 即 p.id as pid
  • 除非你愿意。它将是$row['name'],而不是$row['p.name']。表名不会出现。只有您为列名提供的列名或别名。
  • 所以你唯一需要做别名的时候是当你从两个共享一个列名的表中选择时。否则它是可选的。
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 2017-12-04
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多