Aller au contenu

COUNT, une solution rapide ?


Troll

Sujets conseillés

Salut à toutes et à tous :)

Alors voilà, je voudrais vérifier, avant enregistrement si une ou plusieurs lignes d'une table contiennent la même chaine que $chaine dasn la colonne "titre", s'il y a plusieurs lignes le contenant, les compter, et rajouter à la fin de $chaine un "2" s'il y a déjà une ligne qui contient la donnée, un "3" s'il y en a déjà deux, un "4" s'il y en a déjà trois la contenant...etc.

J'avais pensé faire ça :

$var = mysql_query("SELECT COUNT (*) FROM table WHERE titre='$chaine' ");
$var = mysql_result($var);
if($var != 0) { $chiffre = $var+1; $chaine = $chaine.$chiffre; } // Si le count (*) ne renvoit pas zéro, on rajoute le nombre d'entrées + 1 à la fin de la chaine
else { } // si le count (*) renvoit zéro alors tout va bien :)

Seulement je me demandais si dans une table qui va sûrement contenir de très nombreuses lignes dans le futur, un COUNT(*) avec un argument qui peut être long (un titre...on va dire jusqu'à 40 caractères ?), cela ne ralentirait pas la base de donnée, et s'il n'y avait pas dans ce cas, une alternative plus rapide...?

Merci d'avance à tous ceux qui participeront :)

Lien vers le commentaire
Partager sur d’autres sites

Qu'est ce que tu appelles très nombreuses lignes ?

Tout d'abord, aucun problème pour le COUNT(*) avec un WHERE.

Rassure toi par contre sur le nombre de caractères du titre, de toutes manière, l'opérateur "=" s'arrête dès qu'il detecte une différence, il est donc probable qu'il ne scanne que les 2-3 premiers caractères par ligne ( enfin, tout dépend de tes titres, c'est sûr ) .

Ensuite, si tu vois que c'est vraiment lent, il te suffirait de rajouter un petit index, mais vraiment, je pense que ce serait superflu.

Petite remarque cependant : ta solution pour trouver les doublons me semble un peu buggée. En effet, si tu stockes les titre renumérotés en BDD, la condition WHERE titre='$chaine' ne matchera QUE le premier titre ( ie. "Mon titre" ) , mais pas les éventuels titre numérotés ( ie. "Mon titre 2" , "Mon titre 3" , etc. ) .

Il vaudrait mieux sélectonner tous les titres commencant par $chaine ( WHERE titre LIKE '$chaine%' ) et compter ensuite dans ton programme toute les lignes qui sont réellement des doublons renumérotés.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines plus tard...

Salut à toi,

(J'avais pas recu l'accusé de réponse... d'où ma réposne tardive.)

Pour le bug des chiffres j'y ai déjà pensé, en fait je ne rajouterais pas le chiffre dans le titre mais dans le nom du fichier, c'est pour ne pas avoir deux entrées de la bdd portant sur le même fichier (car le fichier est créé à partir du titre) que je voulais mettre ceci en place.

Donc dans la bdd les titres pareils resteraient pareil, et ainsi pour savoir combien y'a de fichiers, et donc le nombre du dernier, je compte les entrées de ce nom, et j'ajoute 1... Je sais pas si tu me suis :mrgreen:

Je souhaitais juste savoir si quand il y aura plusieurs centaines d'entrées dans cette table le COUNT(*) avec un gros paramètre ne risquait pas de ralentir.

Mais puisque tu dis que le '=' compare caractère par caractère et s'arrête donc parfois très vite, ca doit etre bon. :) Merci bien =)

Lien vers le commentaire
Partager sur d’autres sites

Je te conseille quand même de mettre un index sur ton titre, ça aidera bien pour ta requête.

Et si c'est juste pour créer un fichier, pourquoi ne pas se servir d'un id, que tu dois déjà avoir, plutot que le titre ? Tu n'aurais alors plus à faire de count ou quoi que ce soit

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...