Left join de la la mort à optimiser

Par flo3376, il y a 12 ans


Base de données MySQL

Bonjour à tous,

il y a quelque mois j'avais abandonné le left join et préféré utilisé plusieurs requête qui se suivent, mais voilà,
je vai devoir retourné sur du left join car je vais devoir une grosse requéte SQL.

A l'époque ou j'ai abandonnée le left join c'était due a un fonctionnement aléatoire de la requête dans mes php.

Il fallait optimiser la requête avec des "as".

Mais voilà cette simple chose m'échappe totalement.

pourriez vous m'aider avec cette requête?

Merci d'avance flo.

select 
    phpbb_users.user_id,
    phpbb_users.username,
    phpbb_profile_fields_data.user_id,
    phpbb_profile_fields_data.pf_icao,
    tracker_cil_airports.icao,
    tracker_cil_airports.name,
    tracker_cil_airports.lat,
    tracker_cil_airports.lng
from phpbb_users
LEFT JOIN phpbb_profile_fields_data ON phpbb_users.user_id = phpbb_profile_fields_data.user_id
LEFT JOIN tracker_cil_airports ON phpbb_profile_fields_data.pf_icao = tracker_cil_airports.icao
WHERE tracker_cil_airports.icao IS NOT NULL

4 réponses

wilose, il y a 12 ans

Bonjour,
voila ta requête :

<?php 
('SELECT
    u.user_id,
    u.username,
    d.user_id AS profile_id,
    d.pf_icao,
    a.icao,
    a.name,
    a.lat,
    a.lng
FROM phpbb_users u
LEFT JOIN phpbb_profile_fields_data d
    ON u.user_id = d.user_id
LEFT JOIN tracker_cil_airports a
    ON d.pf_icao = a.icao
WHERE a.icao IS NOT NULL')
?>

A la ligne 5, le 'AS' est optionnel, tu peut l'écrire :

<?php 
'd.user_id profile_id,'
?>
flo3376, il y a 12 ans

houlà pas sur de comprendre

je vais tester et décortiquer

merci

wilose, il y a 12 ans

En faite, on renomme les tables à 'FROM' et 'LEFT JOIN' en écrivant une lettre ou un mot.
Et ensuite on place cette lettre avant chaque champs pour bien les différencier, savoir facilement à quel table ils appartiennent.
Il est aussi possible de renommé les champs d'une table, de ce faite, tu peu avoir 2 tables qui ont un champ du même nom, un mauvais exemple chez toi (je vient de m'en apercevoir..) 'user_id'!
Ils ont tous les 2 le même contenu, donc en sélectionner 1 suffit.

Benjamin Derepas, il y a 12 ans

Je suis le résonnement de Wilose, toute fois, as tu penser à changer ton moteur de stockage (si tu le peut ?) en InnoDB ?
InnoDB gère les relations , un gros avantage !