Getallen uit de database omdraaien

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pim B

Pim B

21/05/2012 16:02:34
Quote Anchor link
Hoi,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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."'");
    }
}

?>

</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..?
 
PHP hulp

PHP hulp

28/01/2022 12:11:40
 
Erwin H

Erwin H

21/05/2012 16:13:27
Quote Anchor link
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
 
Kris Peeters

Kris Peeters

21/05/2012 16:22:13
Quote Anchor link
Het hangt af van je instellingen, maar ik zou trouwens ook verwachten dat id uniek is.

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?
 
Pim B

Pim B

21/05/2012 16:26:35
Quote Anchor link
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.
Gewijzigd op 21/05/2012 16:26:59 door Pim B
 
Erwin H

Erwin H

21/05/2012 16:32:58
Quote Anchor link
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.
 
Eddy E

Eddy E

21/05/2012 19:04:34
Quote Anchor link
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.


Dus even je database weer leeggooien, je CSV omkeren (of omgekeerd importeren) en dan opnieuw importeren.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.