Getallen uit de database omdraaien
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>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?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."'");
}
}
?>
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..?
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
Je kan niet de id van 1 op 10 zetten, omdat id=10 al voorkomt in de DB.
Ook uiteraard alles wat Erwin zegt.
Voor dit soort dingen zou ik eerst denken aan de gegevens exporteren naar file en dan terug importeren.
Trouwens ... een id aanpassen is een vreemd ding.
Een id moet eigenlijk maar aan twee dingen voldoen: uniek zijn en niet veranderd worden.
Is er een goede reden om dit te doen?
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.
Gewijzigd op 21/05/2012 16:26:59 door Pim B
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.
Pim B op 21/05/2012 16:26:35:
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.
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.