sql >> Databasteknik >  >> RDS >> Mysql

MYSQL JOIN på flera tabeller ger inga resultat

Det finns två problem:

  1. Du behöver en LEFT JOIN på vänner. En LEFT JOIN säger att alla poster från den första tabellen i kopplingen ska returneras även om det inte finns några resultat i den andra tabellen i kopplingen. Du bör också markera WHERE klausulvillkor relaterade till friends till LEFT JOIN klausul, så att villkoren uppstår vid sammanfogningen. Du bör också använda m.id där det är möjligt i dina anslutningar istället för $myId för att eliminera redundans.
  2. Din WHERE-sats är för restriktiv (överflödiga villkor). Använd alltid den enklaste uppsättningen av villkor som möjligt och sätt så många som lämpligt vid JOIN så de är lättare att läsa.

Exempel (Redigerad för att lägga till inlägg från vänner också):

$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. Vad är det korrekta indexet för att fråga strukturer i arrayer i Postgres jsonb?

  2. Hur lagrar jag dagliga poster från en mysql-tabell till en annan?

  3. SQLAlchemy JSON-kolumn - hur man utför en innehåller-fråga

  4. SQL-fråga för att utföra radiesökning baserat på latitud longitud