Avatar billede ofirpeter Nybegynder
09. juli 2004 - 15:02 Der er 8 kommentarer og
1 løsning

Oprydning i MySQL

Jeg har brug for en mysql query som kan hjælpe mig med at "rydde op" i min database, som ser således ud:

Navn  ID
----  --
PostA  2
PostB  3
PostC  8
PostD  78

Mit script skulle så gerne ordne ID'erne på følgende måde:

Navn  ID
----  --
PostA  1
PostB  2
PostC  3
PostD  4

Altså skal nummereringen bare starte fra 1 og så give det næst højeste nummer ID 2, tredje højeste ID 3 osv.

Nogen ideer til hvordan det kan gøres? Jeg rydder op
Avatar billede kare Nybegynder
09. juli 2004 - 15:31 #1
Lav det i php:

mysql: SELECT Navn FROM tabel ORDER By Navn;

php:
$i = 0;
for alle resultater i select-sætningen
    $i++;
    mysql:UPDATE Tabel SET ID = $i;
loop
Avatar billede kare Nybegynder
09. juli 2004 - 15:32 #2
Manglede lige:

UPDATE Tabel SET ID = $i WHERE Navn == [navn]
Avatar billede ofirpeter Nybegynder
09. juli 2004 - 20:33 #3
Tror ikke helt jeg er med. Kan du uddybe lidt hvad du gør?
Avatar billede ofirpeter Nybegynder
09. juli 2004 - 20:52 #4
Jeg er kommet så langt:

<?php include("INFO.php"); ?>
<?
$querry = mysql_query("SELECT navn FROM $table_tekst ORDER By navn") or die(mysql_error());
  while ($ud = mysql_fetch_array($querry)){
 
$i = 0;
$i++;

mysql_query("UPDATE $table_tekst SET prio = $i") or die(mysql_error());
mysql_query("UPDATE $table_tekst SET prio = $i WHERE Navn == '$ud[navn]'") or die(mysql_error());
}
?>

Men den giver mig en fejl: "near '==' at line 1
Avatar billede kare Nybegynder
10. juli 2004 - 21:39 #5
Lidt rettelser og kommentarer til din kode:

<?php include("INFO.php"); ?>
<?php /*jeg skriver altid <?php alle steder - så er du sikker på det ikke går galt */
$querry = mysql_query("SELECT navn FROM $table_tekst ORDER By navn") or die(mysql_error()); /* her selecter du alle navnene og sorterer dem i stigende rækkefølge */
$i = 0; /* tmp-tælleren nulstilles fra start */
  while ($ud = mysql_fetch_array($querry)){
 
$i = 0; /* denne skal stå uden for while-løkken *7
$i++; /* tælleren tælles én op for hvert navn du har select'et */

/* første UPDATE er fjernet - min besked var ikke helt klar - anden linien skulle erstatte den jeg skrev først */
mysql_query("UPDATE $table_tekst SET prio = $i WHERE Navn == '$ud[navn]'") or die(mysql_error()); /* feltet prio sættes til tællerens værdi for det aktuelle navn */
}

/* nu burde du have opdateret det hele korrekt :) */
?>
Avatar billede ofirpeter Nybegynder
13. juli 2004 - 12:31 #6
Tak nu forstår jeg mere, men jeg får desværre stadig samme fejl:

You have an error in your SQL syntax near '== 'Kontakt'' at line 1

(Kontakt er en at posterne i "navn")

Jeg har desuden ændret "Navn" til "navn" i sidste mysql_query, men det vil stadig ikke lykkes, koden ser nu således ud:

<?php include("INFO.php"); ?>
<?php
$querry = mysql_query("SELECT navn FROM $table_tekst ORDER By navn") or die(mysql_error());
$i = 0;
while ($ud = mysql_fetch_array($querry)){
 
$i = 0;
$i++;

mysql_query("UPDATE $table_tekst SET prio = $i WHERE navn == '$ud[navn]'") or die(mysql_error());
}

?>
Avatar billede kare Nybegynder
13. juli 2004 - 13:41 #7
Du har stadig $i = 0; inde i while-løkken, den skal ikke være inde i while-løkken.

Du skal ikke have to lighedstegn (==) i SQL kun ét - min fejl når man blander rundt i det:)
Avatar billede ofirpeter Nybegynder
13. juli 2004 - 15:28 #8
Sådan så virker det!
Mange tak skal du have.

Det blev altså:

<?php include("INFO.php"); ?>
<?php
$querry = mysql_query("SELECT navn FROM $table_tekst ORDER By prio") or die(mysql_error());
$i = 0;
while ($ud = mysql_fetch_array($querry)){
$i++;
mysql_query("UPDATE $table_tekst SET prio = $i WHERE navn = '$ud[navn]'") or die(mysql_error());
}
?>
Avatar billede kare Nybegynder
13. juli 2004 - 15:35 #9
Velbekomme

/Kare
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester