[MySQL] Gaten in database vinden

Pagina: 1
Acties:

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 12:27

Snow_King

Konijn is stoer!

Topicstarter
Hallo,

Ik heb een probleem met mijn system specs pagina.
Er zitten wat gaten in de database, dus de ID's lopen niet meer helemaal op, bijv. nr 7 mist..

Hoe kan ik deze gaten nu gemakkelijk vinden?
Ik wil namelijk de laatste row gaan selecten, maarja als er gaten in de database zitten, dan is het aantal rows niet gelijk aan de laatste ID.

er zitten 11 gaten in de database en om nou 1650 rows door te lopen vind ik wel een beetje te veel van het goede!

* Snow_King heeft niet zelf die gaten veroorzaakt maar dat was nrg!

  • whoami
  • Registratie: December 2000
  • Laatst online: 04-09 22:16
Bedoel uw databank corrupt is, dat er geen referentiele integriteit meer is?
Of bedoel je dat er 'gaten' zitten in de nummering van auto-increment velden?

https://fgheysels.github.io/


  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 10:20
Dit soort gaten krijg je volgens mij nogal gauw. vooral in't begin, als je nog wat aan 't debuggen bent (eigen ervaring... :) )

Maar om de rij met het hoogste id te kunnen krijgen:
code:
1
2
3
select * from tabel
order by id desc
limit 1

??

  • whoami
  • Registratie: December 2000
  • Laatst online: 04-09 22:16
Op dinsdag 25 juni 2002 21:44 schreef PietM het volgende:
Maar om de rij met het hoogste id te kunnen krijgen:
code:
1
2
3
select * from tabel
order by id desc
limit 1

??
Een select max() is toch wel iets efficiënter.

https://fgheysels.github.io/


  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 10:20
Op dinsdag 25 juni 2002 21:45 schreef whoami het volgende:

[..]

Een select max() is toch wel iets efficiënter.
Behalve als je de hele rij wilt zien... Wil je alleen het ID, heb je uiteraard gelijk.

  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05-2025
je zou een scriptje kunnen maken dat steeds het id van het vorige id aftrekt dat moet dus steeds 1 (of -1) zijn. als je dat laat uitprinten dus

if (($id1-$id2) =! -1) {

echo $id1."<br>";
}

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

De vraag is wat het probleem is met die gaten, zoals whoami al laat zien is er meestal een andere oplossing voor.

Je moet geen nieuwe IDs willen berekenen eigenlijk, maar noem anders nog eens wat situaties waarin je dat wel zou willen.

Verder zijn de missende ids niet terug te toveren in MySQL, jammer maar helaas >:)

|_____vakje______|


  • Snow_King
  • Registratie: April 2001
  • Laatst online: 12:27

Snow_King

Konijn is stoer!

Topicstarter
Op dinsdag 25 juni 2002 21:43 schreef whoami het volgende:
Bedoel uw databank corrupt is, dat er geen referentiele integriteit meer is?
Of bedoel je dat er 'gaten' zitten in de nummering van auto-increment velden?
het aantal rows is niet gelijk aan de laatste ID, dus de auto_increment klopt niet, het gaat bijv van 6 naar 8 dus 7 ontbreekt...

  • whoami
  • Registratie: December 2000
  • Laatst online: 04-09 22:16
Ik zie ook het probleem niet. Als je een goed datamodel hebt, zou dat eigenlijk niet mogen uitmaken.

Gebruik je auto-inc velden, en je wist een paar records, dan gaat bij nieuwe records de nummering gewoon verder. De gaten worden niet opgevuld.

https://fgheysels.github.io/


  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 10:20
Op dinsdag 25 juni 2002 21:49 schreef Snow_King het volgende:

[..]

het aantal rows is niet gelijk aan de laatste ID, dus de auto_increment klopt niet, het gaat bijv van 6 naar 8 dus 7 ontbreekt...
Is rij 7 dan niet ge-delete?

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 12:27

Snow_King

Konijn is stoer!

Topicstarter
Op dinsdag 25 juni 2002 21:47 schreef sjoerdb het volgende:
je zou een scriptje kunnen maken dat steeds het id van het vorige id aftrekt dat moet dus steeds 1 (of -1) zijn. als je dat laat uitprinten dus

if (($id1-$id2) =! -1) {

echo $id1."<br>";
}
ik krijg nu een paar keer per dag een smsje waarin staat hoeveel users er zijn geregt, hoeveel hits ik al hebt gehad en nu wil ik ook laten sturen wie er als laatste geregt is..

dus als ik doe mysql_count_rows en dan wat daar uit komt als ID neem dan komt het niet goed uit.
Dus ik kan dan de laatste row niet selecten.

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Op dinsdag 25 juni 2002 21:51 schreef Snow_King het volgende:
Dus ik kan dan de laatste row niet selecten.
Tis jouw draad, dus wel goed lezen ;)
Whoami droeg reeds als oplossing aan:
select * from tabel
order by id desc
limit 1

|_____vakje______|


  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 10:20
Op dinsdag 25 juni 2002 21:51 schreef Snow_King het volgende:

[..]


Dus ik kan dan de laatste row niet selecten.
kun je mijn stukkie code dus gebruiken, toch?

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 12:27

Snow_King

Konijn is stoer!

Topicstarter
http://got.duck.ath.cx/system/test.php

als daar count ie de rows van twee tabellen..

de laatste ID is echter 1659 dus dat komt niet echt overeen met elkaar!

het aantal rows zou in princiepe overeen moeten komen met de ID van de laatste row toch?

nu wil ik dus die gedelete rows vinden!

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 12:27

Snow_King

Konijn is stoer!

Topicstarter
Op dinsdag 25 juni 2002 21:44 schreef PietM het volgende:
Dit soort gaten krijg je volgens mij nogal gauw. vooral in't begin, als je nog wat aan 't debuggen bent (eigen ervaring... :) )

Maar om de rij met het hoogste id te kunnen krijgen:
code:
1
2
3
select * from tabel
order by id desc
limit 1

??
dude, you are great!
dat werkt dus, ik had er ff over heen gelezen..
maar nu wil ik toch die gaten vinden!

dat wordt met de hand zoeken?

  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 10:20
die gaten vind je volgens mij niet zo 1-2-3 met MySQL-SQL. En dan nog: waarom zou je dat willen??

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 12:27

Snow_King

Konijn is stoer!

Topicstarter
Op dinsdag 25 juni 2002 22:05 schreef PietM het volgende:
die gaten vind je volgens mij niet zo 1-2-3 met MySQL-SQL. En dan nog: waarom zou je dat willen??
das gewoon uit principe, ik wil het gewoon overeen laten komen met elkaar.

namelijk de ene tabel heeft meer rows dan de andere :(

  • PTBoy
  • Registratie: Juni 2002
  • Laatst online: 10:20
Volgens mijn [bescheiden] mening moet je je verder helemaal never nooit niet druk maken om die id's. Dat zijn gewoon niets-zeggende getallen, alleen bedoeld om het voor de database makkelijker te maken...

maar je zou natuurlijk wel een script kunnen schrijven die de ontbrekende id's uitlijst...

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 12:27

Snow_King

Konijn is stoer!

Topicstarter
Op dinsdag 25 juni 2002 22:11 schreef PietM het volgende:
Volgens mijn [bescheiden] mening moet je je verder helemaal never nooit niet druk maken om die id's. Dat zijn gewoon niets-zeggende getallen, alleen bedoeld om het voor de database makkelijker te maken...

maar je zou natuurlijk wel een script kunnen schrijven die de ontbrekende id's uitlijst...
jij hebt geen hint in de goede richting, voor een script?

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 07:27

PowerSp00n

There is no spoon

Op dinsdag 25 juni 2002 22:13 schreef Snow_King het volgende:

[..]

jij hebt geen hint in de goede richting, voor een script?
Ja, begin er gewoon eens aan en zie waar je uit komt.

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 12:27

Snow_King

Konijn is stoer!

Topicstarter
Ik heb alle id's laten echo'en en ben toen maar met de hand op zoek gegaan, gelukkig lagen ze allemaal onder de 140 dus die had ik zo gevonden..

Zoiets gokte ik ook wel, want dit was in de begin periode van het script..

tnx allemaal!

Verwijderd

Als je hier ooit nog eens een scriptje voor wil hebben, zou dat zoiets worden:
PHP:
1
<?$vorige_rij = 0;$sql = "SELECT id FROM tabelletje ORDER BY id ASC";$resultaat = mysql_query($sql);while ($record = mysql_fetch_array($resultaat)) { if (($record['id'] - $vorige_rij) > 1)) {     $aantalgaten = $record['id'] - $vorige_rij - 1;    echo "Er zit(ten) ".$aantalgaten." gat(en) vanaf rij ".$vorige_rij; } $vorige_rij = $record['id'];}?>

Maar zoals al gezegd is, dit hoef je nooit te doen.
Pagina: 1