-1

私は自分が間違っていることに困惑しています。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';

これにより、最初のテーブル(パーク)にあるすべてのデータが正常に返されます。コメント名、コメント、イベント、日付、説明2の項目は、結合されたテーブル(イベントとコメント)からのものです。

'$ row ['state']'をエコーすると、正しい答えが得られます。しかし、他のテーブルの項目のいずれかをエコーし​​た場合(たとえば、$ row ['comment'])、結果は得られません。

私は何が欠けていますか?

4

3 に答える 3

0

結合されたテーブルから列を返す方法を示す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'
;

これは完全なソリューションではありませんが、純粋にメインテーブルからではなく、結合されたテーブルからデータを返すhoのデモンストレーションです。

于 2012-10-20T22:51:29.740 に答える
0

あなたはそれらを返すためのクエリを書きませんでした...

<?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';
于 2012-10-20T21:52:21.317 に答える
0

これを試してください:

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);
}
于 2012-10-20T21:55:11.177 に答える