【问题标题】:inner join ot returning results from second and third tables内连接不返回第二个和第三个表的结果
【发布时间】:2012-10-11 04:12:59
【问题描述】:

我对自己做错了什么感到困惑。我在许多资源中查找了这一点,包括我正在学习 PHP 的那本书,它似乎应该是正确的......但它只是不起作用。

<?php

try
{
    $sql = 'SELECT parks.id, parks.state, parks.name, parks.description, parks.site, parks.sname, parks.street, parks.city, parks.zip, parks.phone FROM parks
INNER JOIN comments ON parks.parkid = comments.parkid
INNER JOIN photos ON parks.parkid = photos.parkid 
INNER JOIN events ON parks.parkid = events.parkid';
$result = $pdo->query($sql);
}
catch (PDOException $e)
{
    $error = 'Error fetching data: ' . $e->getMessage();
    include 'output.html.php';
    exit();
}

foreach ($result as $row)
{
    $datas[] = array ('id' =>$row['id'],
    'parkid' =>$row['parkid'],
    'state' =>$row['state'], 
    'name' =>$row['name'], 
    'description' =>$row['description'], 
    'site' =>$row['site'], 
    'sname' =>$row['sname'],
    'street' =>$row['street'], 
    'city' =>$row['city'], 
    'phone' =>$row['phone'],
    'zip' =>$row['zip'],
    'commentname' =>$row['commentname'],
    'comment' =>$row['comment'],
    'event' =>$row['event'],
    'date' =>$row['date'],
    'description2' =>$row['description2']);
}

include 'writing.html.php';

这将返回第一个表(公园)中的所有数据就好了。项目 commentname、comment、event、date 和 description2 来自连接表(events 和 cmets)

如果我回显 '$row['state']' 我会得到正确答案。但是,如果我回显其他表中的任何项目(例如 $row['comment']),我不会得到任何结果。

我错过了什么?

【问题讨论】:

  • 您没有列出任何要返回的联接表中的列
  • 马克,我不明白你的回答。除了在数组中,我应该在哪里列出它们?它们在数组中。
  • 该数组是根据 $row 中 SQL 返回的 $result 构建的...但是如果您的 $sql 没有列出列,那么它们将不在 $row... 中下面回答列出列的示例,而不是完整的解决方案

标签: php arrays inner-join


【解决方案1】:

显示如何从连接表返回列的 SQL

SELECT parks.id, 
       parks.state, 
       parks.name AS park_name, -- use an alias when column names exist in more than one table
       parks.description, 
       parks.site, 
       parks.sname, 
       parks.street, 
       parks.city, 
       parks.zip, 
       parks.phone,
       comments.comment, -- to return the comment from the comments table
       events.name AS event_name, -- return name from the event table
       event_date  -- return date from the event table
  FROM parks 
  INNER JOIN comments 
          ON parks.parkid = comments.parkid 
  INNER JOIN photos 
          ON parks.parkid = photos.parkid  
  INNER JOIN events 
          ON parks.parkid = events.parkid'
;

这不是一个完整的解决方案,而是演示如何从连接的表中返回数据,而不是纯粹从主表中返回数据

【讨论】:

  • 哇这正是我想要的。有效。非常感谢。我已经尝试了好几天了,你是救命稻草。
【解决方案2】:

您没有编写查询来返回它们...

<?php

try
{
    $sql = 'SELECT parks.id, parks.state, parks.name, parks.description, parks.site, parks.sname, parks.street, parks.city, parks.zip, parks.phone 
    --insert here any other column names you want to have in PHP
    FROM parks
    INNER JOIN comments ON parks.parkid = comments.parkid
    INNER JOIN photos ON parks.parkid = photos.parkid 
    INNER JOIN events ON parks.parkid = events.parkid';
    $result = $pdo->query($sql);
}

或者您可以全部获取(注意,如果表格中有列具有相同的名称,这将不起作用!):

    $sql = 'SELECT * 
    FROM parks
    INNER JOIN comments ON parks.parkid = comments.parkid
    INNER JOIN photos ON parks.parkid = photos.parkid 
    INNER JOIN events ON parks.parkid = events.parkid';

【讨论】:

  • 我正在尝试获取所有数据。我正在对它进行排序并显示在包含中。每个表都有一个名为 id 的列。会不会是这个问题?
【解决方案3】:

请试试这个:

try
{
    $sql = 'SELECT parks.id, parks.state, parks.name, parks.description, parks.site, parks.sname, parks.street, parks.city, parks.zip, parks.phone FROM parks
INNER JOIN comments INNER JOIN photos INNER JOIN events ON parks.parkid = comments.parkid and parks.parkid = photos.parkid and parks.parkid = events.parkid';
$result = $pdo->query($sql);
}

【讨论】:

  • 直接在数据库中试试这个查询
  • 我的原始代码做了同样的事情。 $name['phone'] 返回正确,$name['comment'] 什么也不返回。我检查了,每个公园 id 都有“评论”条目,所以这不是问题......
猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多