C'est un peu compliqué. En gros, je cherche à structurer des tables interdépendantes en classes pour pouvoir les manipuler facilement.
Exemple concret : je gère des projets auxquels sont rattachées des photos. J'aurai une table projet et une table photo :
- PROJET
idprojet (clé primaire)
titreprojet
dateprojet
- PHOTO
idphoto (clé primaire)
idprojet (clé secondaire)
fichierphoto
Je fais donc une requête "SELECT * FROM projet,photo WHERE projet.idprojet=photo.idprojet" et je trie le résultat de la requête pour grouper ce qui va ensemble, en fonction de ce que j'appelle la clé secondaire (je ne pense pas que ce soit le bon terme

).
Ça me permet d'obtenir quelque chose de ce genre après tri (2 projets, le premier ayant deux photos et le second une seule) :
Code : Tout sélectionner
[projet][1]
idprojet = 1
titreprojet = "Le projet n° 1"
dateprojet = 2009-08-01
[photo][37]
idphoto = 37
idprojet = 1
fichierphoto = "photo37.jpg"
[photo][44]
idphoto = 44
idprojet = 1
fichierphoto = "photo44.jpg"
[projet][2]
idprojet = 2
titreprojet = "Le projet n° 2"
dateprojet = 2009-08-05
[photo][23]
idphoto = 23
idprojet = 2
fichierphoto = "photo23.jpg"
Je me démerde donc pour faire mon tri en fonction des clés primaires (je crée d'abord un tableau $primaires que je remplis via mysql_fetch_field puis au moment du mysql_fetch_array pour récupérer les valeurs, je compare au tableau $primaires : si c'est dedans et qu'il n'y a qu'une clé, c'est un nouveau projet, s'il y en a deux, ça se rattache au projet correspondant à la clé secondaire, etc.)
Et donc, tout marche bien sauf si dans ma requête je rajoute un ORDER BY (par exemple pour classer les projets par date décroissante) : dans ce cas, mysql_fetch_field ne voit plus de clés primaires et mon tri ne marche pas.
Je ne sais pas si c'est un bug de mysql_fetch_field (j'ai trouvé plusieurs rapports de bugs allant en ce sens, mais ils concernaient peut-être des cas particuliers et ils sont de toute façon censés être corrigés depuis) ou si c'est normal, mais dans les deux cas ça ne m'arrange pas.
D'où ma recherche d'un autre moyen de trouver la clé primaire d'une table, si possible sans faire de requête supplémentaire.
C'est un peu compliqué. En gros, je cherche à structurer des tables interdépendantes en classes pour pouvoir les manipuler facilement.
Exemple concret : je gère des projets auxquels sont rattachées des photos. J'aurai une table projet et une table photo :
- PROJET
idprojet (clé primaire)
titreprojet
dateprojet
- PHOTO
idphoto (clé primaire)
idprojet (clé secondaire)
fichierphoto
Je fais donc une requête "SELECT * FROM projet,photo WHERE projet.idprojet=photo.idprojet" et je trie le résultat de la requête pour grouper ce qui va ensemble, en fonction de ce que j'appelle la clé secondaire (je ne pense pas que ce soit le bon terme ;) ).
Ça me permet d'obtenir quelque chose de ce genre après tri (2 projets, le premier ayant deux photos et le second une seule) :
[code][projet][1]
idprojet = 1
titreprojet = "Le projet n° 1"
dateprojet = 2009-08-01
[photo][37]
idphoto = 37
idprojet = 1
fichierphoto = "photo37.jpg"
[photo][44]
idphoto = 44
idprojet = 1
fichierphoto = "photo44.jpg"
[projet][2]
idprojet = 2
titreprojet = "Le projet n° 2"
dateprojet = 2009-08-05
[photo][23]
idphoto = 23
idprojet = 2
fichierphoto = "photo23.jpg"[/code]
Je me démerde donc pour faire mon tri en fonction des clés primaires (je crée d'abord un tableau $primaires que je remplis via mysql_fetch_field puis au moment du mysql_fetch_array pour récupérer les valeurs, je compare au tableau $primaires : si c'est dedans et qu'il n'y a qu'une clé, c'est un nouveau projet, s'il y en a deux, ça se rattache au projet correspondant à la clé secondaire, etc.)
Et donc, tout marche bien sauf si dans ma requête je rajoute un ORDER BY (par exemple pour classer les projets par date décroissante) : dans ce cas, mysql_fetch_field ne voit plus de clés primaires et mon tri ne marche pas.
Je ne sais pas si c'est un bug de mysql_fetch_field (j'ai trouvé plusieurs rapports de bugs allant en ce sens, mais ils concernaient peut-être des cas particuliers et ils sont de toute façon censés être corrigés depuis) ou si c'est normal, mais dans les deux cas ça ne m'arrange pas.
D'où ma recherche d'un autre moyen de trouver la clé primaire d'une table, si possible sans faire de requête supplémentaire.