[MySQL] id's kloppen niet meer in tabel bij phpMyAdmin

Pagina: 1
Acties:
  • 167 views sinds 30-01-2008
  • Reageer

  • Captain Pervert
  • Registratie: Mei 2000
  • Laatst online: 26-02 17:43
Ik heb een website waar o.a. iedere dag een quote wordt gepubliceerd met behulp van een prefab scriptje van hotscripts.com.

De quotes moeten handmatig met phpMyAdmin ingevoerd worden in een tabel, met als items quote (text) en author (varchar 150). De quotes worden automatisch genummerd als je ze toevoegt, maar sinds ik een paar heb verwijderd klopt het niet meer (id int(9) unsigned), op de dagen dat een lege plaats aan de beurt was, werd er niets weergegeven. Ik heb toen alle id's veranderd, en er zijn nu 88 quotes. Maar als ik een nieuwe quote wil toevoegen, krijgt die automatisch het id 103 (dat klopt, er zijn zo'n 15 quotes verwijderd in de loop der tijd).

Hoe zorg ik ervoor dat nieuwe toevoegingen goed genummerd gaan worden?

Porsche 928 - It's about as fast as you can go without having to eat airline food.


Verwijderd

Die id's zouden nooit iets uit moeten maken. De belangrijkste eis van id is dat hij uniek is. Als je wat weghaalt, dan is het weg. Het is niet dat per se dat vrijgekomen id meteen gebruikt moet worden. Je zou je er niet druk om moeten maken :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

ID's zijn per definitie onveranderbaar en hebben buiten je database om geen betekenis. Op je site kun je ze gebruiken om intern tussen PHP-pagina's te communiceren, maar daar houdt het al snel op. ID's moet je niet willen veranderen, want in een relationele database moet je dan ook alle verwijzingen naar dat ID aanpassen, en dat wil je niet, geloof me. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Paul
  • Registratie: September 2000
  • Laatst online: 02-05 07:01
Je ID's kloppen perfect, daar gebeurt exact wat er in de handleiding staat dat er zou moeten gebeuren :)

Wat je kunt doen is afvangen of het ID dat je opvraagt bestaat, en anders een ander ID opvragen.

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Captain Pervert
  • Registratie: Mei 2000
  • Laatst online: 26-02 17:43
Aha, ok voor de duidelijke uitleg!

Dan zit de fout in de manier van opvragen denk ik.

Dat is dit:


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

    $con = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS);
    mysql_select_db($DB_NAME);

    $getNoOfQuotesQuery = mysql_query("select count(*) from quotes", $con);
    $no_of_quotes = mysql_result($getNoOfQuotesQuery,0);
    
    $getMetaDataQuery = mysql_query("SELECT * FROM quotes_meta", $con);
    $row = mysql_fetch_row($getMetaDataQuery); 
    $number_reached = $row[1];
    $date_modified= $row[2];
    
    // get the current day of the month (from 1 to 31)
    $day_today = date("j");
    
    
    if ($date_modified != $day_today){
        // we have reached the end of the quotes
        if ($number_reached >($no_of_quotes - 1)){
            $number_reached = 1;
            $query3 = mysql_query('UPDATE quotes_meta SET date_modified = "'.$day_today.'", number_reached = "'.$number_reached.'"', $con);
            mysql_query($query3,$con);
        } else {
        // we haven't reached the end of the quotes
        // therefore we increment $number_reached
        $number_reached = $number_reached + 1;
        $query3 = mysql_query('UPDATE quotes_meta SET date_modified = "'.$day_today.'", number_reached = "'.$number_reached.'"', $con);
        mysql_query($query3,$con);
        }
    }
    
    // we get the quote with 'id = $number_reached' from the database
    $getQuoteQuery = mysql_query("SELECT quote,author FROM quotes WHERE id = ".$number_reached, $con);
    $row = mysql_fetch_row($getQuoteQuery);
    
    // we print the quote ($row[0]) and the author ($row[0])
    echo $row[0]."<p align='right' style='margin-right: 30px'><i>-- " . $row[1];
    
    // close the database connection
    mysql_close($con);
?>



Is hier dan iets mis mee?

[ Voor 68% gewijzigd door Captain Pervert op 18-08-2005 01:35 ]

Porsche 928 - It's about as fast as you can go without having to eat airline food.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Wat is de "fout" dan? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Ik zie het probleem zo ook niet hoor :??

If I can't fix it, it ain't broken.


  • Paul
  • Registratie: September 2000
  • Laatst online: 02-05 07:01
Ik denk dat je het verkeerde stukje hebt geplakt, want het stuk dat er nu staat haalt alle verjaardagen van een bepaalde maand op ipv een random quote?

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Captain Pervert
  • Registratie: Mei 2000
  • Laatst online: 26-02 17:43
Paul Nieuwkamp schreef op woensdag 17 augustus 2005 @ 20:39:
Ik denk dat je het verkeerde stukje hebt geplakt, want het stuk dat er nu staat haalt alle verjaardagen van een bepaalde maand op ipv een random quote?
Dat klopt, de code die ik bedoelde staat er nu.

Porsche 928 - It's about as fast as you can go without having to eat airline food.


  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 30-04 00:31

krvabo

MATERIALISE!

in phpMyAdmin heb je een optie om het volgende auto-increment-id te veranderen, zodat je die bijvoorbeeld op 89 kan zetten, ipv 103

Selecteer een tabel, klik bovenin op operations en kijk onderaan bij "Table options"

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


  • jnr24
  • Registratie: Oktober 2004
  • Laatst online: 27-04 13:13
Uhmmm okay :D lekkere wazige code, deze wil inderdaad perfect opvolgende ID's hebben, erg fout.

eerste vraag:
Waarom wil je dat de quote een dag lang blijft staan, waarom niet random elke keer dat je de page laadt?

Als je dat echt graag wil zou ik meer zoiets doen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    $getNoOfQuotesQuery = mysql_query("select count(*) from quotes", $con);
    $no_of_quotes = mysql_result($getNoOfQuotesQuery,0);
    
    $getMetaDataQuery = mysql_query("SELECT * FROM quotes_meta", $con);
    $row = mysql_fetch_row($getMetaDataQuery); 
    $number_reached = $row[1];
    $date_modified= $row[2];
    
    // get the current day of the month (from 1 to 31)
    $day_today = date("j");
    
    
    if ($date_modified != $day_today){
        // we have reached the end of the quotes
        if ($number_reached >($no_of_quotes - 1)){
            $number_reached = 1;
            $query3 = mysql_query('UPDATE quotes_meta SET date_modified = "'.$day_today.'", number_reached = "'.$number_reached.'"', $con);
            mysql_query($query3,$con);
        } else {
        // we haven't reached the end of the quotes
        // therefore we increment $number_reached
        $number_reached = $number_reached + 1;
        $query3 = mysql_query('UPDATE quotes_meta SET date_modified = "'.$day_today.'", number_reached = "'.$number_reached.'"', $con);
        mysql_query($query3,$con);
        }
    }
    
    // we get the quote with 'id = $number_reached' from the database
    $getQuoteQuery = mysql_query("SELECT quote,author FROM quotes LIMIT ".$number_reached.",1", $con);
    $row = mysql_fetch_row($getQuoteQuery);
    
    // we print the quote ($row[0]) and the author ($row[0])
    echo $row[0]."<p align='right' style='margin-right: 30px'><i>-- " . $row[1];


zie de LIMIT ipv ID=..
Pagina: 1