reorder MySQL rows

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kinderpindakaas
  • Registratie: Oktober 2006
  • Laatst online: 12-03-2024
Ik ben hier opzoek naar een SQL query die het volgende moet gaan realiseren.

Ik heb een tabel met in de eerste column een uniek ID, dus die increment MySQL zelf steeds en dan nog een reeks andere kolommen.
Nu wil ik deze rows gaan herordenen en dat de unieke id's blijven staan.

Dus bijvoorbeeld de tabel:

ID | Naam | Product |
------------------------------------
1 | piet | fiets |
2 | kees | auto |
3 | jan | boot |

Wil ik alfabetisch in MySQL updaten op product en dat ID blijft staan.
Dus dan krijg je:


ID | Naam | Product |
------------------------------------
1 | kees | auto |
2 | jan | boot |
3 | piet | fiets |

Iemand een idee hoe je dit kan doen.
Ik heb zitten proberen met SQL ALTER commando, maar die kan volgens mij te weinig

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Bij de eerste de beste insert klopt het niet meer, dus je moet het sowieso niet willen. Je hangt nu een betekenis aaneen synthetische key. Zet aub gewoon overal een order by neer, of vertel welk probleem je echt hebt.

{signature}


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Jouw ID hoort bij je record. Dat moet je niet ineens gaan veranderen, want dan kun je dag-dag zwaaien naar je referentiële integriteit... Dat ID hoort niet meer te doen dan te dienen als een unieke manier om je record aan te geven, als je visueel de eindgebruiker een nummertje wil geven dan doe je dat met een apart veld of los je het op in je clientcode. Je records hernummeren is nooit een goed idee. Daarnaast heeft ALTER wat te maken met tabelstructuren, niet met records.

Als je dit dan toch per se door wil zetten (NIET DOEN!), dan zul je een scriptje moeten schrijven dat het afhandelt. Dit ga je niet in één query doen.

'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.


Acties:
  • 0 Henk 'm!

Verwijderd

Ik vraag me wel af waarom je dit zou willen...als je geen gebruik kan maken van ORDER BY statements, is er sowieso iets anders mis...

Acties:
  • 0 Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
En wat nu als je een record toe wilt voegen? Dan moet je de tabel opnieuw gaan opbouwen, lijkt me niet handig.

Als je dan toch zo zeker bent:
- Maak een kopie van de tabel structuur en zet een autoincrement op ID;
- Doe een insert into select order by en laat hierbij het ID veld op NULL;
Dus INSERT INTO new_table (id, col1, col2) SELECT NULL, col1, col2, colX ....
- Verwijder de oude tabel;
- Rename de nieuwe tabel naar de naam van de oude tabel.

Acties:
  • 0 Henk 'm!

  • Raymond P
  • Registratie: September 2006
  • Laatst online: 16:27
NMe schreef op vrijdag 18 februari 2011 @ 18:23:
Als je dit dan toch per se door wil zetten (NIET DOEN!), dan zul je een scriptje moeten schrijven dat het afhandelt. Dit ga je niet in één query doen.
Dat kan wel in 1 query zolang je de veldwaardes aanpast en niet de primary key, wat op hetzelfde neerkomt.

Testdatabaseje maken:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE  `testdb` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `naam` varchar(75) NOT NULL,
  `product` varchar(75) NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `testdb`
    (`id`, `naam`, `product`)
VALUES
    (1, 'piet', 'fiets'),
    (2, 'kees', 'auto'),
    (3, 'jan', 'boot');


SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SET @newid=0;
UPDATE `testdb`,
        (SELECT 
            `naam`, `product`,
            @newid:=@newid+1 AS `tempid`
        FROM
            `testdb`
        ORDER BY
            `naam`
        ASC) as `tempdb`
SET
    `testdb`.`naam` = `tempdb`.`naam`,
    `testdb`.`product` = `tempdb`.`product`
WHERE
    `testdb`.`id` = `tempdb`.`tempid`;



Maar inderdaad, niet doen, en als het echt moet dan is de oplossing van ReenL de betere.

- knip -


Acties:
  • 0 Henk 'm!

  • ameesters
  • Registratie: Juni 2008
  • Laatst online: 05-01-2022
waarom zou je dit willen? kan je niet beter een ORDER BY product ASC achter je query zetten als je een SELECT doet?

Standaard word er namelijk gesorteerd op de eerste kollom in de tabel.

id's is namelijk niet iets in mee te gaan rotzooien....

Acties:
  • 0 Henk 'm!

  • kinderpindakaas
  • Registratie: Oktober 2006
  • Laatst online: 12-03-2024
Ik had er ook al een slecht gevoel bij.
Mijn klant maakt veel gebruik van MySQL en kwam met het verzoek om de tabel te herordenen op categorienaam zodat het overzichtelijker zou worden.
Dit omdat MySQLadmin elke keer de tabel sorteert op ID als je hem gaat bekijken.
Blijkbaar is een paar muisklikken extra al te veel.

Acties:
  • 0 Henk 'm!

Verwijderd

Als je klant data bekijkt via de MySQL Admin zou ik als ik jou was adviseren om daar een aparte tool voor te gebruiken...in MySQL Admin kan je (in mijn ervaring) behoorlijk wat dingen kapot maken...

Acties:
  • 0 Henk 'm!

  • kinderpindakaas
  • Registratie: Oktober 2006
  • Laatst online: 12-03-2024
Mijn klant is niet heel erg digibeet, maar je kan als je niet uit kijkt kan je inderdaad veel schade aanrichten.
In de loop der tijd als bepaalde opdrachten te vaak in de database uitgevoerd worden, zal ik hem inderdaad nog eens adviseren om dit op te laten nemen in het CMS

Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
zal ik hem inderdaad nog eens adviseren om dit op te laten nemen in het CMS
Dat is toch raar, dat je iemand die geen digibeet is uberhaupt moet adviseren het misschien een keertje in het CMS op te laten nemen, maar het zegt ook iets over jou als 'leverancier' want een beetje leverancier zou i.p.v zich in een kromme bocht te wringen te tabel telkens te moeten herindelen, het gewoon in het CMS stoppen. Kost waarschijnlijk nog minder moeite ook. (vanuitgaande dat je beetje weet wat je aan het doen bent, maar daar twijfel ik heel eerlijk gezegd ook over)

NOFI, gewoon eerlijk en direct.

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 19:26

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

kinderpindakaas schreef op zaterdag 19 februari 2011 @ 15:57:
Ik had er ook al een slecht gevoel bij.
Mijn klant maakt veel gebruik van MySQL en kwam met het verzoek om de tabel te herordenen op categorienaam zodat het overzichtelijker zou worden.
Dit omdat MySQLadmin elke keer de tabel sorteert op ID als je hem gaat bekijken.
Blijkbaar is een paar muisklikken extra al te veel.
Hou je klant asjeblieft gewoon weg uit PHPMyAdmin als hij zo praat. Je hebt je klant dan gewoon de verkeerde tool gegeven.
Leuk artikel, maar ze gaan er veell te makkelijk mee om. Alsof het een dagelijkse bezigheid is om je records te hernummeren....

[ Voor 25% gewijzigd door NMe op 19-02-2011 19:42 ]

'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.


Acties:
  • 0 Henk 'm!

  • kinderpindakaas
  • Registratie: Oktober 2006
  • Laatst online: 12-03-2024
kwaakvaak_v2 schreef op zaterdag 19 februari 2011 @ 17:54:
[...]


Dat is toch raar, dat je iemand die geen digibeet is uberhaupt moet adviseren het misschien een keertje in het CMS op te laten nemen, maar het zegt ook iets over jou als 'leverancier' want een beetje leverancier zou i.p.v zich in een kromme bocht te wringen te tabel telkens te moeten herindelen, het gewoon in het CMS stoppen. Kost waarschijnlijk nog minder moeite ook. (vanuitgaande dat je beetje weet wat je aan het doen bent, maar daar twijfel ik heel eerlijk gezegd ook over)

NOFI, gewoon eerlijk en direct.
Ik weet wel degelijk wat ik doe, maar mijn klant heeft andere programmeurs in dienst die zijn CMS doen. En dat advies had ik al eens eerder gegeven. Erg praktisch is het allemaal niet nee, maar mijn klant wil het graag zo dus ja wie ben ik om dat steeds af te keuren.

Acties:
  • 0 Henk 'm!

Verwijderd

kinderpindakaas schreef op zondag 20 februari 2011 @ 17:20:
maar mijn klant wil het graag zo dus ja wie ben ik om dat steeds af te keuren.
Jij bent de expert dus als de klant jou inhuurt dan is dat met een reden. Ik heb nog nooit een klant hoeven overtuigen dat het geen goed idee is. Die vragen komen niet eens bij ze op. Als ze oplopende nummertjes willen dan maak je er een kolom bij, maar van id's moet je afblijven.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

kinderpindakaas schreef op zondag 20 februari 2011 @ 17:20:
[...]

Ik weet wel degelijk wat ik doe, maar mijn klant heeft andere programmeurs in dienst die zijn CMS doen. En dat advies had ik al eens eerder gegeven. Erg praktisch is het allemaal niet nee, maar mijn klant wil het graag zo dus ja wie ben ik om dat steeds af te keuren.
Iemand met meer verstand van zaken. Niet ja en amen zeggen, maar uitleggen dat hij data kan verliezen als hij dit door wil zetten, alleen omdat hij te lui is om zelf even te sorteren in een scherm waar hij niet eens toegang toe zou moeten hebben als digibeet.

'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.


Acties:
  • 0 Henk 'm!

  • Raymond P
  • Registratie: September 2006
  • Laatst online: 16:27
kinderpindakaas schreef op zaterdag 19 februari 2011 @ 15:57:
Ik had er ook al een slecht gevoel bij.
Mijn klant maakt veel gebruik van MySQL en kwam met het verzoek om de tabel te herordenen op categorienaam zodat het overzichtelijker zou worden.
Dit omdat MySQLadmin elke keer de tabel sorteert op ID als je hem gaat bekijken.
Blijkbaar is een paar muisklikken extra al te veel.
+
kinderpindakaas schreef op zondag 20 februari 2011 @ 17:20:
[...]


Ik weet wel degelijk wat ik doe, maar mijn klant heeft andere programmeurs in dienst die zijn CMS doen.
Als jij de klant zijn DBA bent dan weet je imho dus niet waar je mee bezig bent.
Ik zie nergens staan dat je klant vraagt om omnummering van ID's, dat is geheel jouw idee.
De klant wilt gewoon een tabel op een bepaalde manier zien.

MYSQL heeft een native manier om ingewikkelde queries te laten zien:
CREATE VIEW
In mijn ogen wel een flinke overkill voor een simpele ORDER BY.

- knip -

Pagina: 1