0

次のクエリは機能しますが、何らかの理由で、最初のselectステートメントが表示されている唯一のURLです。他のテーブルのアイテムは表示されますが、URLが間違っています。

$sql = "(SELECT postsID as postsID, postsSubject AS postsSubject, postsTimestamp AS timestamp
                FROM   posts
                WHERE  postsCategory = '$id')
            UNION 
                (SELECT eventID as eventID, eventTitle as eventTitle, eventsTimestamp as timestamp
                FROM   events
                WHERE  eventLocation = '$id')
            ORDER BY timestamp DESC";

情報はイベントテーブルと投稿テーブルの両方から正しく表示されていますが、結果は投稿テーブルからのみ取得されているように見えます。

たとえば、次の情報があるとします

postsID |  postsSubject |  postsTimestamp
  1            post             123

eventID |  eventTitle   | eventsTimestamp
  2           event            456

結果を表示するには、次のものがあります

   while($row = mysql_fetch_assoc($result)){
    ?>
        <tr><td><? echo '<a href="viewevent.php?eventID=' . $row['eventID'] . '">' . $row['eventTitle'] . '</a>' ; ?></td>
        <tr><td><? echo '<a href="viewpost.php?postID=' . $row['postsID'] . '">' . $row['postsSubject'] . '</a>' ; ?></td>
    <?  
        if(preg_match('/[0-9]/',$row['timestamp'])){        
            list($yyyy,$dd,$mm) = explode('-',$row['timestamp']);
                    $newDate = $dd."-".$mm."-".$yyyy;
            }
        ?>
            <td><center><? echo $newDate; ?></center></td></tr>
        <?
        }
        echo '</table>';
}

出力は正しいようです

post   123
event  456

ただし、両方の結果は(それぞれ)以下にリンクしています

viewpost.php?id = 1
viewpost.php?id = 2  //this should be viewevent.php
4

2 に答える 2

2

以下のSQL:

$sql = "(SELECT postsID as ids, postsSubject AS description, postsTimestamp AS timestamp,'p' as status
                FROM   posts
                WHERE  postsCategory = '$id')
            UNION 
                (SELECT eventID as ids, eventTitle as description, eventsTimestamp as timestamp, 'e' as status
                FROM   events
                WHERE  eventLocation = '$id')
            ORDER BY timestamp DESC";

データを取得するとき、

while($row = mysql_fetch_assoc($result)){
     if ($row['status']=="e"){
    ?>
        <tr><td><? echo '<a href="viewevent.php?eventID=' . $row['ids'] . '">' . $row['description'] . '</a>' ; ?></td>
<? }else{?>
        <tr><td><? echo '<a href="viewpost.php?postID=' . $row['ids'] . '">' . $row['description'] . '</a>' ; ?></td>
<? } ?>
    <?  
        if(preg_match('/[0-9]/',$row['timestamp'])){        
            list($yyyy,$dd,$mm) = explode('-',$row['timestamp']);
                    $newDate = $dd."-".$mm."-".$yyyy;
            }
        ?>
            <td><center><? echo $newDate; ?></center></td></tr>
        <?
        }
        echo '</table>';
}
于 2012-08-28T02:20:59.560 に答える
0

union / unionはすべて、最初のテーブルの列を使用して、行を1つのテーブルにまとめます。したがって、結果セットにはPostsIdがありますが、EventsIdはありません。

おそらく、列を並べて配置する結合が必要です。おそらく、これを2つの別々のクエリとして実行したいと思うでしょう。

次に例を示します。

$sql = "select *
        from (SELECT postsID as postsID, postsSubject AS postsSubject, postsTimestamp AS timestamp
                FROM   posts
                WHERE  postsCategory = '$id') p
            cross join
                (SELECT eventID as eventID, eventTitle as eventTitle, eventsTimestamp as timestamp
                FROM   events
                WHERE  eventLocation = '$id') e
            ORDER BY postsTimeStamp DESC"

これはデカルト積を生成していることに注意してください。したがって、テーブルの1つからさらに行がある場合は、行が急増します。

于 2012-08-28T02:09:33.530 に答える