Bonjour,
voilà je bloque sur le problème suivant qui me semble assez complexe. Le but est de générer automatiquement une condition SQL valide de type "FROM xxxx INNER JOIN xxxx ON xxxx.xx = xxxxx.xx", etc à partir de différentes définitions de clés étrangères et de leurs clés primaires associées.
Pour l'exemple je stocke les liaisons de tables (clés primaires / clés étrangères) dans un tableau, mettons que j'aie les 3 clés étrangères suivantes :
Pour ces tables SQL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 foreignKeys[0]['name'] = 'id_user'; foreignKeys[0]['table'] = 'own'; foreignKeys[0]['primaryKeyName'] = 'id'; foreignKeys[0]['primaryKeyTableName'] = 'users'; foreignKeys[1]['name'] = 'id_user'; foreignKeys[1]['table'] = 'cards'; foreignKeys[1]['primaryKeyName'] = 'id'; foreignKeys[1]['primaryKeyTableName'] = 'users'; foreignKeys[2]['name'] = 'id_appt'; foreignKeys[2]['table'] = 'own'; foreignKeys[2]['primaryKeyName'] = 'id'; foreignKeys[2]['primaryKeyTableName'] = 'appts';
Je voudrais pouvoir aboutir à une requête du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 USERS id OWN #id_user #id_appt APPTS id CARDS id #id_user
Mais il a y 2 problèmes qui se posent dûs à la syntaxe SQL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 FROM users INNER JOIN own ON own.id_user = users.id INNER JOIN appts ON appts.id = own.id_appt INNER JOIN cards ON cards.id_user = users.id
1) un nom de table ne peut apparaître qu'une seule fois dans la requête, ceci ne fonctionne pas :
INNER JOIN own ON own.id_user = users.id
INNER JOIN own ON appts.id = own.id_appt
2) on ne peut utiliser une clé que si sa table a déjà été nommée, ex, ceci ne fonctionne pas :
FROM appts
INNER JOIN cards ON cards.id_user = users.id
INNER JOIN own ON own.id_appt = appts.id
INNER JOIN users ON own.id_user = users.id
Les index numériques du tableau foreignKeys sont censés ne pas avoir d'importance. Je suis parti dans l'idée de trier le tableau multi pour ensuite n'avoir plus qu'à le parcourir en construisant la chaîne (sans tests) mais je ne crois pas que cela soit possible sans tests.
Voilà, je ne suis pas sûr que le tableau soit la bonne structure de données pour stocker les liaisons. Si quelqu'un a une idée quelconque, je lui en serais reconnaissant
Merci d'avance.
Partager