Requete SQL

cs_dgdg Messages postés 17 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 20 mars 2008 - 8 mai 2006 à 23:33
cs_dgdg Messages postés 17 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 20 mars 2008 - 20 mai 2006 à 12:29
Salut à tous !
j ai un petit prob
je cherche à modifier toute une table avec une requête dans un FOR ...

genre :
for($i=0;i<$taille;$i++){

if(exp...){
$sql="UPDATE categories SET nom='$nom',locked='1' WHERE ordre='1' ";
}else{
$sql="UPDATE categories SET nom='$nom',locked='0' WHERE ordre='1' ";
}

mysql_query($sql);
}
Y a t il une solution ???
je suis débutant...

7 réponses

cs_spyro666 Messages postés 137 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 28 août 2007
9 mai 2006 à 07:57
En fait tu n'est pas trop mal parti, à part le fait que si tu le fais de cette manière et que ta table compte 15'000 enregistrement tu mettra 15'000 * 0.015 s c'est à dire plus de 3 minutes juste pour mettre à jour 15'000 entrée.

Maintenant est ce que $nom est unique à chaque entrée ou est ce qu'elle est commune? Parce que comme tu fais ta requete là tu mets en fait à jour TOUTES les entrées ou ordre='1' et ça $taille fois.

En plus ton test est inutile aussi car les deux requêtes affectent les mêmes entrées en fin de compte.

Pourrais tu préciser de quelle manière tu voudrais modifier la table?

Spyro666 contre le 555
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
9 mai 2006 à 14:00
ouais ca depend de ton test "exp...". si il depend de champs de la table, et sur une partie definie des enrgistrements, alors tu a surement un moyen de faire une seule ou quelques requetes.
Il nous faut juste un peu plus de details pour t'aider...
0
cs_dgdg Messages postés 17 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 20 mars 2008
9 mai 2006 à 15:45
En faite je fais un tri manuel en amont, et le but et de mettre à jour la table completement pour respecter un ordre donné... ($nom etant unique)

table sql -> champ 1 : ordre (auto_increment)
champ 2 : categorie
champ 3 : index_cat
champ 4 : locked

En amont j ai 2 tableaux 1-> categorie vu
2->categorie cachée

$taille= la taille de la table sql à modifier
$index1=0;
for.... $index<$taille {
if( sizeof(tableau (categorie vu)) > $index) {
$sql="UPDATE categories SET nom='$nom',locked='0' WHERE ordre='$index' ";
}else{
$nom=tableau[$index1] (nom des categories cachée)
$sql="UPDATE categories SET nom='$nom',locked='1' WHERE ordre='$index' ";
$index1++;
}
mysql_query($sql);
}

(bien sur je fais des tests avant de passer dans ma boucle
genre : if( taille nouvelles donnees == taille table sql) ...

Ce bout de code me semble plus qu affreux et comme dis "spyro666" avec 15000 enregistrements ca va être la mort
j espere avoir été assez claire
merci à tous votre aide !!!
0
cs_spyro666 Messages postés 137 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 28 août 2007
9 mai 2006 à 19:22
Mais à la rigueur tu t'en fous de l'ordre dans lequel se trouvent les données dans ta base de donnée. Tu n'as qu'a faire un tri au moment ou tu veux récupérer les valeur ( grâce à ORDER BY).

Spyro666 contre le 555
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
9 mai 2006 à 23:30
et il me semble que tu peu prendre juste les N premiers enregistrements. je crois qu'en postgres c la commande OFFSET, mais c ptetre different en MySQL
0
cs_spyro666 Messages postés 137 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 28 août 2007
10 mai 2006 à 12:36
Oui effectivement c'est possible de limiter à partir d'un certain numéro de réponse et un certaine quantité :

Par ex :
"SELECT MAX(`champ_1`) FROM `table_1` WHERE `ordre`='".$nom."' LIMIT 0,30";

cette requete va récupérer les 30 premiers enregistrement avec le plus grand champ.

Spyro666 contre le 555
0
cs_dgdg Messages postés 17 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 20 mars 2008
20 mai 2006 à 12:29
pfffff bien sur ORDER BY....
desolé pour la question un peu  crmmmm crmmmm
fin de journée un peu à l ouest lol
en tout cas merci  à tous d avoir pris le temps de me répondre !
bonne prog
0
Rejoignez-nous