サポート » 使い方全般 » 2つのselect文の結合

  • いつもお世話になっております。
    現在、会員制サイトを構築しており、A)該当会員の記事にコメントが入った場合、B)該当会員の記事に投票があった場合の一覧を別々のページに表示しております。

    A) 【ユーザー名】さんが【記事タイトル名】にコメントしました。(最新:20件)
    B) 【ユーザー名】さんが【記事タイトル名】に投票しました。(最新:20件)

    B)はWP-PostRatingsというプラグインを使用しています。
    現在、A)とB)は以下のように別々のページに新着50件を表示しています。

    A)の表示

    <?php
    $current_id = get_current_user_id();
    $results = $wpdb->get_results("
    	SELECT *
    	FROM $wpdb->comments
    	JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID
    	JOIN $wpdb->users ON $wpdb->users.ID = $wpdb->comments.user_id
    	WHERE user_id = '$current_id'
    	ORDER BY comment_date DESC
    ");
    if( !empty( $results ) ) :
    foreach($results as $value) :
    ?>
    
    表示の処理
    
    <?php endforeach; ?>
    <?php elseif( empty( $results ) ): ?>
    
    空だった時の処理
    
    <?php endif; ?>
    <?php wp_reset_query(); ?>

    B)の表示

    <?php
    $current_id = get_current_user_id();
    $results = $wpdb->get_results("
    	SELECT *
    	FROM $wpdb->posts
    	JOIN $wpdb->ratings ON $wpdb->posts.ID = $wpdb->ratings.rating_postid
    	JOIN $wpdb->users ON $wpdb->users.ID = $wpdb->ratings.rating_userid
    	WHERE post_author = '$current_id'
    	ORDER BY rating_timestamp DESC
    ");
    if( !empty( $results ) ) :
    foreach($results as $value) :
    ?>
    
    表示の処理
    
    <?php endforeach; ?>
    <?php elseif( empty( $results ) ): ?>
    
    空だった時の処理
    
    <?php endif; ?>
    <?php wp_reset_query(); ?>

    やりたい事は、上記のA)、B)のSELECT文を結合して同一のページ内に混在するような形で、一覧で表示したいのですが、どのようにしたら良いかわかりません。
    ネットなどで調べてみたところ、2つのSELECT文を結合するにはUNIONを使用するというところまでは推測できたのですが、以下の2点の問題があり行き詰まっております。

    1.2つのセレクト文の、「$wpdb->comments(wp-comments)」と、「$wpdb->ratings(wp-ratings)」は、異なる定義のテーブルとなっている。
    (タイムスタンプなども、以下のようにフォーマットが異なっております)。
    wp-ratings: ・カラム名 rating_timestamp ・データ型 varchar(15)
    wp-comments: ・カラム名:comment_date ・データ型:datetime

    2.結合した後に、上記のタイムスタンプでソートを行い且つ、以下のように文言を切り分けて表示させる方法がわからない。
    A) 【ユーザー名】さんが【記事タイトル名】にコメントしました。
    B) 【ユーザー名】さんが【記事タイトル名】に投票しました。

    恐れ入りますが、もし分かる方がおりましたら、お教えいただければ幸いです。

    • このトピックはyutayamadatippetが4年、 10ヶ月前に変更しました。
    • このトピックはyutayamadatippetが4年、 10ヶ月前に変更しました。
    • このトピックはyutayamadatippetが4年、 10ヶ月前に変更しました。
    • このトピックはyutayamadatippetが4年、 10ヶ月前に変更しました。
    • このトピックはyutayamadatippetが4年、 10ヶ月前に変更しました。
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • こんにちは

    SQL のご質問はここではなく、SQL についての質問を受け付けているところで質問した方が良いと思いますが・・・

    型が異なる場合はキャストすれば良いと思います。

    列名が異なるのは SELECT する項目に別名をつけたら良いと思います。

    ただ、関数を使ってキャストした結果に Order By すると、インデックスが使えないのでデータ量が非常に多い場合は遅くなるかもしれません。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「2つのselect文の結合」には新たに返信することはできません。