Van een table uit de database wil ik alle id's omdraaien. Dus 1->10, 2->9, 3->8 t/m 10->1. Maar dan met veel meer records.
Ik heb deze functie geschreven:
<code>
<?php
function omdraaien()
{
$query = mysql_query("SELECT * FROM table");
$aantal = mysql_num_rows($query);
for($i=1; $i<=$aantal; $i++)
{
$j = $aantal - $i + 1;
//echo $j."<br />";
mysql_query("UPDATE table SET id = '".$j."' WHERE id = '".$i."'");
}
}
?>
</code>
Maar die werkt niet. Als ik $j echo, gaat het wel goed, dus het ligt niet aan de for. En als ik in de query $j en $i vervang door getallen, doet-ie het ook. Ik krijg ook geen foutmeldingen, maar hij draait de id's niet om.
Wat doe ik fout..?
Bedenk wel dat je op deze manier uberhaupt de fout ingaat. Als je namelijk halverwege bent ga je alles weer terugzetten. Bedenk maar:
id = 1 => 10
id = 2 => 9
id = 3 => 8
id = 4 => 7
id = 5 => 6
id = 6 => 5 dus ook degene die je net naar 6 hebt gezet.... en zo verder
Ik snap wat jullie zeggen. Nu kan ik het oplossen.
Ik had deze table geïmporteerd via csv. Er stonden nog geen id's in de csv; die heeft phpmyadmin er zelf bij gezet. Maar hij geeft het bovenste record id=1, terwijl ik wil dat het onderste record id=1 is.
Je hoeft het niet te exporteren, je moet gewoon zorgen dat elke rij maar maximaal 1 keer worden bekeken. Dat kan je doen door de hele omzet operatie in 1 keer uit te voeren in SQL. Als je weet wat het hoogste id is en het laagste, dan zou elke id via de volgende formule kunnen worden aangepast:
id_nieuw = max + min - id_oud
dus als het loopt van 1 tot 10 dan krijg je voor 1:
id_nieuw = 10 + 1 - 1 = 10
voor 4:
id_nieuw = 10 + 1 - 4 = 7
etc etc.
Als je dus een sql statement kan maken waarin elk record met die formule wordt aangepast ben je met 1 statement klaar, zonder dat je in eerder genoemde loop komt.
Ik snap wat jullie zeggen. Nu kan ik het oplossen.
Ik had deze table geïmporteerd via csv. Er stonden nog geen id's in de csv; die heeft phpmyadmin er zelf bij gezet. Maar hij geeft het bovenste record id=1, terwijl ik wil dat het onderste record id=1 is.
Dus even je database weer leeggooien, je CSV omkeren (of omgekeerd importeren) en dan opnieuw importeren.