8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un soucis assez gênant : certains de mes scripts doivent, pour leur bon fonctionnement, vérifier l'existence de certaines colonnes dans certaines tables. Parfois, il y a une dizaine de vérifications par requête. Je vous laisse imaginer la lenteur du script lorsqu'il y a cinquantes requêtes ... l'avantage, c'est que bien souvent, il s'agit de requête exactement identiques, appelées via. des classes et objets. La requête de vérification de l'existence d'une colonne est celle-ci :


		$query = 'SHOW COLUMNS FROM '.$table.' LIKE "'.$field.'"';
		$result = mysql_query($query) or die(mysql_error());
		if(mysql_num_rows($result) > 0) {
			return true;
		}
		else {
			return false;
		}


Savez-vous s'il est possible de mettre en cache le résultat d'un SHOW COLUMNS ? Je sais qu'avec un SELECT, il suffit d'ajouter un SQL_CACHE, mais impossible dans ce cas de figure ... connaissez vous une autre solution ?

Merci d'avance,
Gaylord.P. Smiley smile
Modifié par Gaylord.P (23 Mar 2010 - 07:51)
Salut,

je ne pense pas que le SQL_CACHE fonctionne avec autre chose qu'un SELECT mais par contre je suis presque sûr que tu pourrais optimiser ta façon de traiter cela ! Smiley langue

Puisque tu fais ça je suppose que tu gères des tables aux colonnes dynamiques donc je verrais bien une gestion en backoffice qui modifierait une table table_colonnes à chaque ALTER TABLE pour ajouter, supprimer ou modifier une colonne et tu n'aurais plus qu'à faire un SELECT dans cette table.

Sinon il y aurait peut-être moyen de ne pas faire SHOW COLUMNS FROM table LIKE ... mais récupérer et stocker le temps du traitement le résultat de SHOW COLUMNS FROM table (le traitement PHP pour parcourir les résultats étant forcément plus rapide que n requêtes).
Merci pour l'info ! Smiley smile

Du coup il suffit de faire
SELECT table_name FROM INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME = 'nom_du_champ'
Ah oui, bon à savoir, je ne connaissais pas cette possibilité.
J'ai tout de même utilisé la seconde méthode de Heyoan, à savoir stocker les résultats dans une variable et tester si celle-ci n'existe pas déjà : le gain de temps est impressionnant puisque mes pages s'affichent quasiment instantanément. J'essaierai cette dernière méthode ultérieurement, sur de grosses pages, afin d'évaluer la différence de temps de calcul entre les deux possibilités.

Merci à vous deux en tous cas. Smiley smile
Gaylord.P.