sql >> データベース >  >> RDS >> Mysql

結果を返さない複数のテーブルでのMYSQLJOIN

    2つの問題があります:

    1. LEFT JOINが必要です 友達に。 LEFT JOIN 結合の2番目のテーブルに結果が見つからない場合でも、結合の最初のテーブルからすべてのレコードを返すように指示します。WHEREも必要です。 friendsに関連する条項の条件 LEFT JOINに 節、条件が結合で発生するように。 m.idも使用する必要があります $myIdの代わりに、可能な限り結合で 冗長性を排除します。
    2. WHERE句が制限されすぎています(冗長条件)。常に可能な限り単純な条件のセットを使用し、JOINに適切な数を配置します 読みやすくなります。

    例(友達からの投稿も追加するために編集):

    $query = "SELECT DISTINCT `u`.`id`, `p`.`byuser`, `p`.`newpost`, `p`.`id`, `p`.`postdate`
              FROM `users` AS `u`
              LEFT JOIN `friends` AS `f` 
                  ON `f`.`userid` = `u`.`id` 
                  OR `f`.`friendid` = `u`.`id`
              JOIN `pinnwand` AS `p` 
                  /* This will get all posts made by the user */
                  ON `p`.`byuser` = `u`.`id` 
                  /* This will get all posts made TO the user by friends */
                  OR (`p`.`byuser` IN (`f`.`userid`, `f`.`friendid`)
                      AND `p`.`touser` = `u`.`id`)
              WHERE `u`.`id` = {$myId}
                  AND `p`.`publicp` < 3 
                  AND `p`.`typ` = 2
              ORDER BY `p`.`id` DESC 
              LIMIT {$limit}, 10";
    


    1. Laravelのcreated_atとupdated_atの名前を変更します

    2. pg_table_size、pg_relation_size、pg_total_relation_sizeの違いは何ですか? (PostgreSQL)

    3. MySQL-グループ内のカウンター

    4. SQLServerのSTATISTICSIOとは何ですか?