MYSQL Join Statement - Optionele tabellen?

Oké, ik zal proberen dit duidelijk te maken lol. Eigenlijk heb ik 4 verschillende tabellen die ik probeer aan te sluiten in plaats van een paar afzonderlijke SQL-instructies te doen, omdat de MYSQL-engine het beter zou moeten kunnen optimaliseren dan ik zou kunnen.

Eigenlijk heb ik deze 4 tabellen:

projects (key:id)
project_users (key:project_id , user_id)
users (key:id)
tasks (key:project_id)

Dit is mijn vraag:

     SELECT projects.*, users.*, tasks.*,
     FROM 
     projects JOIN ( project_users JOIN 
                     users ON 
                     project_users.user = users.id ) 
        ON projects.id = project_users.project_id
        JOIN ( tasks )
               ON projects.id = tasks.project_id 
      WHERE projects.company = 2 ORDER BY projects.id

Ik probeer in principe een lijst van projecten, gebruikers in dat project en taken in dat project voor een bepaald bedrijf te krijgen.

HET PROBLEEM - Als er geen taak in dit project is, wordt het project niet geretourneerd. Welk ik dat project nog steeds nodig heb, alleen met 0 taken voor dat project.

Ik ben nieuw bij JOIN-uitspraken, dus als er een verbetering is die ik kan doen, laat het me dan weten!

BEDANKT VOOR UW TIJD EN HULP !!!!!

0
Ehh ... Ik ben geen SQL-junkie, maar mijn eerste gedachte was, als je een lijst met projecten en een lijst met taken nodig hebt, dat zijn echt twee vragen ...
toegevoegd de auteur Jared Farrish, de bron
U bedoelt in PHP dat u de lijst met projecten gaat verzamelen terwijl u het queryresultaat doorloopt?
toegevoegd de auteur Jared Farrish, de bron
Ik ben het ermee eens dat het splitsen van het werk beter zou zijn, omdat de structuur van de database suggereert dat gebruikers onafhankelijk zijn van taken en dat het combineren van deze twee in één query enkele bijwerkingen kan hebben.
toegevoegd de auteur Erbureth, de bron
Welnu, ze zijn allebei vergelijkbaar met een sleutelwaarde. Wat betekent dat ik in plaats van projecten te krijgen en dan een lijst met taken in die projecten te krijgen, ik 1 verklaring zo veel sneller wil doen.
toegevoegd de auteur Quinton Pike, de bron

2 antwoord

Het enige wat u hoeft te doen is het toevoegen van left outer vóór de join die de taken samenvoegt. Hiermee krijg je projecten, ook al zijn er geen taken.

2
toegevoegd

links of rechts joins zijn je nieuwe vrienden

http://dev.mysql.com/doc/refman /5.0/en/left-join-optimization.html

0
toegevoegd