0

UNION ALLを使用しているときに、SQLクエリの結果をリンクとしてエコーする際に問題が発生します。

テーブルは次のようになります。

表:投稿
IDユーザー名日付コメント

表:ファイル
IDユーザー名日付ファイル

「ファイル」行には、アップロードされたファイルへのURLが含まれています。

結果を表示するために私が持っているコード:

<?php
$sql="SELECT * FROM posts 
UNION ALL 
SELECT * FROM files 
ORDER BY date DESC LIMIT 100";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result)){
?>

<div> <?php echo $rows['comment']; ?> </div>
<div> <a href="<?php echo $rows['file']; ?>"><?php echo $rows['file']; ?></a> </div>

<?php
}
?>

これで、すべてが正しい順序で並べ替えられますが、ファイル名はリンクとして表示されず、プレーンテキストのみが表示されます。ファイルテーブルのみでクエリを実行した場合、リンクをエコーアウトして問題はありません。

大きな問題は、UNIONALLクエリの結果をリンクとしてどのように表示するかということだと思います。

4

2 に答える 2

2

UNIONクエリを実行すると、列が結合されます。つまり、列commentfile列は同じになり、その結果セット名はcomment(最初のselectステートメント)になります。http://dev.mysql.com/doc/refman/5.0/en/union.htmlを参照してください

posts1つはテーブルに対して、もう1つはに対して2つの別々のクエリを使用する傾向がありますfiles

于 2012-03-26T01:20:10.390 に答える
0

投稿テーブルにある場合

1  2012-03-26 "a comment"
2  2012-03-26 "another comment"

およびファイルテーブル:

1  2012-03-26 "./myfile/txt"
2  2012-03-26 "./ico.gif"

組合はすべて次のようになります。

ID Date       Comment/file
1  2012-03-26 "a comment"
1  2012-03-26 "./myfile/txt"
2  2012-03-26 "another comment"
2  2012-03-26 "./ico.gif"

(注文は保証されません)

したがって、行ごとにコメント付きのdivとリンクとしてのファイル付きのdivを削除しようとすると、これは機能しません。あなたの場合、コメントdivのみが表示されているようです(クエリ結果の行名はコメントである必要があるため)

ただし、達成したいことが上記のような結合を使用して実行できる場合。投稿IDが同じIDのファイル行と一致する場合は、これである可能性があります

SELECT p.comment comment f.file file FROM posts p
INNER JOIN files f ON f.id = p.id

結果は次のようになります。

 comment          file
"a comment"       "./myfile/txt"
"another comment" "ico.gif"

よろしく

于 2012-03-26T01:19:11.720 に答える