Ik heb wat vreemds. Ik heb een database tabel "foo" en daarin heb ik een veld id (primary key) en een veld type (unique key). Op het veld id zit een aut increment. Nu voeg ik in PHPMyAdmin respectievelijk als type "website" in en vervolgens "webshop". Aangezien er auto increment op zit, verwacht je dat het ID van website (als 1e toegevoegd) 1 is en dat van "webshop" 2. Dit klopt ook. Echter, in de database (als ik op "verkennen" druk, worden ze omgekeerd getoond. Dat wil zeggen "webshop" die als 2e is toegevoegd, staat bovenaan:


id   type
2    webshop
1    website

Is dat niet vreemd? Ik had verwacht dat de sortering op basis van de primary key (ID) zou plaatsvinden, en dat dus "website" bovenaan zou staan.

Wat ik ook vreemd vind, is dat wanneer ik de tabel exporteer (naar een bestandje) eerst "webshop" wordt ingevoegd en dan pas "website", terwijl ik ze zelf precies andersom heb ingevoerd.


INSERT INTO `foo` (`id`, `type`) VALUES
(2, 'webshop'),
(1, 'website');

Kan iemand mij uitleggen hoe dit komt?
Is het toevallig een InnoDB-table?
Ja, het is een InnoDb-table.
Hmm... ik kan het niet reproduceren.

Mijn vermoeden is dat dit te maken heeft met het feit dat InnoDB gebruik maakt van een clustered index voor je primary key. De records worden dan opgeslagen in de volgorde waarin ze in de index staan.

Maar ook bij databases geldt: ga er nooit vanuit dat je records in een bepaalde volgorde staan, tenzij je ze expliciet sorteert. ;-)
Ik ben er inmiddels achter waar het probleem hem zit. Hij sorteert niet op de id (primary key) maar op type.


id   type
3    aardappel
2    webshop
1    website 

Waarom zou ie dat doen? Het lijkt me toch veel logischer om op de primary key te sorteren. Ik vind het vreemd.

Toevoeging op 19/05/2013 20:46:05:

Ik merk nu dat het pas gebeurt als ik "type" UNIQUE maak in PHPMyAdmin. Als ik die index eraf haal dan klopt het weer wel. Blijkbaar sorteert ie dus op en UNIQUE veld en niet op de primary key :-s
Je vraagt nu dus waarom PHPmyAdmin een bepaalde kolom pakt om te sorteren?
Maar dat maakt voor jouw website toch niet uit? Je geeft altijd een ORDER BY aan (als goed is).

Om je probleem op te lossen: net boven de kolommen kan je kiezen hoe en waarop PHPmyAdmin moet sorteren.
@Eddy: correct. Ik weet dat ik de kolommen kan sorteren, alleen ik vind het onhandig dat ie sorteert op een key die ik toevallig unique heb gemaakt. Waarom sorteert is niet gewoon op primary key, notabene een auto increment. Da's toch raar? :-s
Hoewel het wel een interessant onderwerp is, is het eigenlijk iets waar je niet maar moet kijken. Als je geen ORDER BY gebruikt mag je NOOIT zomaar uitgaan van de automatische sortering. Die is er namelijk niet. In veel gevallen zal je ook zien dat er records op een volkomen willekeurige volgorde door elkaar staan. Dit komt door de database engine die zijn eigen algoritmes heeft om dat toe te voegen. Zeker als je nog eens records gaat verwijderen kan je dit zien.
Als je wil dat resultaten gesorteerd weergegeven worden dan moet je een ORDER BY clausule meegeven. Punt.
Erwin, ik begrijp wat je bedoelt. Alleen wat ik niet begrijp is waarom de tool (PHPMyAdmin) waarmee ik mijn tabel bekijk zomaar willekeurig gaat sorteren op een kolom.

Als ik in een tabel als 1e kolom een primary key auto increment id instel, dan zou je toch verwachten dat daarop wordt gesorteerd? Maar dat is niet wat er gebeurt. Blijkbaar omdat ik kolom 2 uniek maak, wordt ineens daarop gesorteerd. Da's toch raar??? Ik krijg dus ik plaats van dit:


id   foo
1    zebra
2    aap
3    koalabeer

Dit...


id   foo
2    aap
3    koalabeer
1    zebra

Kan aan mij liggen, maar ik vind dit vreemd.
Hij sorteert standaard niet, dat vraag je tenslotte niet om en maakt het alleen maar trager. Afhankelijk van je storage engine krijg je het al dan niet standaard gesorteerd terug.
Als MySQL steeds zelf bezig zou zijn met het sorteren zou je database alleen maar trager worden.
TJVB tvb op 19/05/2013 23:35:04

Hij sorteert standaard niet

Blijkbaar sorteert ie standaard wel, want hij zet de kolom met het unique veld op alfabetische volgorde. Alleen hij sorteert niet zoals je zou verwachten.

Overigens heb ik het niet over sortering in de programmacode, maar heb ik het nog steeds erover hoe je de tabel in PHPMyAdmin te zien krijgt. Ik had verwacht dat je dan standaard de rijen op ID (PK AI) gesorteerd zou zien.

Reageren