yambejp様
こんばんは。いつもお世話になっております。
>別々で集計してUNIONで結合するのが妥当では?
なるほど~こういうやり方があったんだ~・・と思いつつ、
$sql = "select c.subject,m2.n_name,c.date,c.no,f.f_id
from member as m
inner join friend as f
on m.id=f.id
and m.id=$id
inner join diary as c
on f.f_id=c.id
inner join member as m2
on m2.id=c.id order by no desc LIMIT 0, 30;";
という自分以外のデータを表示するSQL(以前お教えいただいたSQLを参考にしています)と、UNIONで結合すべく、UNIONで結合すべき条件としてデータ型を揃えるなどとあったので、自分のみを表示するSQLを先SQLを変更したところ、当初に質問にも記載したように、自分の発言が2度出る状態となっていたため、
$sql = "select c.`id`, c.`no`, c.`subject`, c.`date`, m.`id`, m.`n_name` FROM diary as c INNER JOIN member as m ON c.`id` = m.`id` WHERE c.`id` = $tb_id order by c.`date` desc limit 0, 30;";
とし、UNIONで結合してみたのですが上手くいきません。
今回、yambejp様のアドバイスでUNION(今まで使ったことがない)を知り(恥)、一気に道が開けたような気がしたのですが、いまいち理解に苦しんでおります。
このお礼(報告)の後も、解決に向け引続き調べてはいきますが、お時間が許されるなら、引続きご指導いただければ幸いです。
お忙しい中恐縮ですが、宜しくお願いいたします。
質問者
補足
yambejp様
こんばんは。お世話になっております。
随分と時間が掛かってしまいましたが、以下のSQLで、とりあえず期待の結果を得ることが出来ました。
まだまだ不完全なSQLかとは思いますが、結果を得ることが出来たのもyambejp様のアドバイスあってのことです。有難う御座いました。
$sql = "(select m.id, c.subject,m2.n_name,c.date,c.no,NULL,f.f_id
from member as m
inner join friend as f
on m.id=f.f_id
and f.id=$tb_id
inner join diary as c
on f.f_id=c.id
inner join member as m2
on m2.id=c.id order by no desc LIMIT 0, 30)
UNION ALL
(select m.`id`, c.`subject`, m.`n_name`, c.`date`, c.`no`, c.`id`, NULL FROM diary as c INNER JOIN member as m ON c.`id` = m.`id` WHERE c.`id` = $tb_id order by c.`no` desc LIMIT 0, 30) order by no desc";
お礼
yambejp様 こんばんは。いつもお世話になっております。 >別々で集計してUNIONで結合するのが妥当では? なるほど~こういうやり方があったんだ~・・と思いつつ、 $sql = "select c.subject,m2.n_name,c.date,c.no,f.f_id from member as m inner join friend as f on m.id=f.id and m.id=$id inner join diary as c on f.f_id=c.id inner join member as m2 on m2.id=c.id order by no desc LIMIT 0, 30;"; という自分以外のデータを表示するSQL(以前お教えいただいたSQLを参考にしています)と、UNIONで結合すべく、UNIONで結合すべき条件としてデータ型を揃えるなどとあったので、自分のみを表示するSQLを先SQLを変更したところ、当初に質問にも記載したように、自分の発言が2度出る状態となっていたため、 $sql = "select c.`id`, c.`no`, c.`subject`, c.`date`, m.`id`, m.`n_name` FROM diary as c INNER JOIN member as m ON c.`id` = m.`id` WHERE c.`id` = $tb_id order by c.`date` desc limit 0, 30;"; とし、UNIONで結合してみたのですが上手くいきません。 今回、yambejp様のアドバイスでUNION(今まで使ったことがない)を知り(恥)、一気に道が開けたような気がしたのですが、いまいち理解に苦しんでおります。 このお礼(報告)の後も、解決に向け引続き調べてはいきますが、お時間が許されるなら、引続きご指導いただければ幸いです。 お忙しい中恐縮ですが、宜しくお願いいたします。
補足
yambejp様 こんばんは。お世話になっております。 随分と時間が掛かってしまいましたが、以下のSQLで、とりあえず期待の結果を得ることが出来ました。 まだまだ不完全なSQLかとは思いますが、結果を得ることが出来たのもyambejp様のアドバイスあってのことです。有難う御座いました。 $sql = "(select m.id, c.subject,m2.n_name,c.date,c.no,NULL,f.f_id from member as m inner join friend as f on m.id=f.f_id and f.id=$tb_id inner join diary as c on f.f_id=c.id inner join member as m2 on m2.id=c.id order by no desc LIMIT 0, 30) UNION ALL (select m.`id`, c.`subject`, m.`n_name`, c.`date`, c.`no`, c.`id`, NULL FROM diary as c INNER JOIN member as m ON c.`id` = m.`id` WHERE c.`id` = $tb_id order by c.`no` desc LIMIT 0, 30) order by no desc";