人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

xoopsのphpについて質問です。

カスタムブロック内にphpを記述しております。

global $id,$xoopsDB,$xoopsTpl;

$myts =& MyTextSanitizer::getInstance();
$sql = "SELECT * FROM ".$xoopsDB->prefix("stories")." WHERE published>0";
$sql = "SELECT * FROM ".$xoopsDB->prefix("xoopscomments");

$result = $xoopsDB->query($sql, 15, 0);

while ( $myrow = $xoopsDB->fetcharray($result) ) {

$storyid = $myts->makeTboxData4show($myrow["storyid"]);

$created = formatTimestamp($myrow['created'],"m/d");
$com_itemid = $myts->makeTboxData4show($myrow["com_itemid"]);


echo "
".$storyid."
".$com_itemid."
";

}

「stories」と「xoopscomments」のsql文をUNION句を使って結合したいと考えています。
$sql = "SELECT * FROM ".$xoopsDB->prefix("stories")." WHERE published>0";
$sql = "SELECT * FROM ".$xoopsDB->prefix("xoopscomments");
上記のsql文を結合させるにはどうしたらよいでしょうか?

よろしくお願いします。

●質問者: kitty12345
●カテゴリ:インターネット ウェブ制作
✍キーワード:echo PHP SELECT SQL XOOPS
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●35ポイント

UNION は「同一構造を持つもの同士を結合する時に使うもの」ですが

$sql = "SELECT * FROM ".$xoopsDB->prefix("stories")." WHERE published>0";

の結果と

$sql = "SELECT * FROM ".$xoopsDB->prefix("xoopscomments");

の結果は同じ構造をしていますか?


何をしたいのかが判らないので具体的には何とも言えませんが

結合するとすればJOINになりますのでユーザーズグループの

下記のやり取りが役に立つのではないかと思います。

Xoops Users Group Japan - 新しくコメントがついた記事一覧を表示するカスタムブロック

◎質問者からの返答

なるほど。UNIONは同じ構造でないと使えないということですか。

では、同じ構造のsql文であった場合の結合の仕方を教えていただけますか?

以下のsql文をUNION ALLを使ってつなげるとどうなるのでしょうか?

$sql = "SELECT * FROM ".$xoopsDB->prefix("xoopscomments");

$sql = "SELECT * FROM ".$xoopsDB->prefix("xoopscomments");


2 ● kn1967
●35ポイント
SELECT * FROM テーブル名1 UNION ALL SELECT * FROM テーブル名2

という書き方になりますので

1回で書くなら

$sql = "SELECT * FROM ".$xoopsDB->prefix("xoopscomments")." UNION ALL SELECT * FROM ".$xoopsDB->prefix("xoopscomments");

2回に分かれるなら

$sql = "SELECT * FROM ".$xoopsDB->prefix("xoopscomments");
$sql .= " UNION ALL SELECT * FROM ".$xoopsDB->prefix("xoopscomments");

余談ですが

SELECT * FROM テーブル名1 UNION ALL SELECT * FROM テーブル名2 UNION ALL SELECT * FROM テーブル名3

というように幾つものテーブルあるいはビューを一度に結びつける事も可能です。

(ただし幾つまで結びつける事ができるのかはデータベース側の仕様や

サーバ環境によりますので一概には言えませんがパフォーマンスを考えると

20も30も結びつけたりするという事は稀だと思いますので特に意識する必要も無いでしょう)

2つの場合もそれ以上の場合もSQLの終端を示すセミコロンを入れる場合は一番末尾の1箇所だけになりますのでお間違いなく。

◎質問者からの返答

大変わかりやすい説明ありがとうございました。

意図しようとしていたことが無事UNION ALLを使いまして実現することができました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ