Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

mySQL sortering doet raar

Pagina: 1
Acties:

  • _Piwi_
  • Registratie: December 2008
  • Laatst online: 21-11 23:44
Het is een vrij vage TT maar ik zit met een raar sortering probleem.

Met mijn query doet ik een sortering op een gebruikertabel. Ik wil sortering op naam maar krijg de volgende output.
Afbeeldingslocatie: http://imageshack.us/a/img542/1176/schermafbeelding2012101.png

De eerste 4 worden dus niet gesorteerd. Er staat geen spatie o.i.d. voor dus dat kan het probleem niet zijn. Iemand die hier ook eens last van heeft gehad?

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 09:42
Hoe ziet je query eruit?
Wat staat er in je 'ORDER BY' ?

  • Cartman!
  • Registratie: April 2000
  • Niet online
- Hoe ziet je query eruit
- Wat voor type veld heeft Contact?

Beetje karige TS zo...

  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

Ik heb de indruk dat je met productiedata bezig bent, en ik begrijp dat je deze informatie zoveel mogelijk wil beschermen, maar met wat we nu hebben kunnen we geen stap vooruit.
De query die je gebruikt hebt, de database die je gebruikt en de structuur van de tabel zouden ons al een eind verder helpen. Indien van toepassing, de query van de views die je gebruikt.

Tenslotte raad ik je ten strengste aan een nieuwe database omgeving op te zetten waarin je naar hartelust kunt testen. Ontwikkellen op productie is gewoon "Not Done!"
In de testomgeving kan je je gevoelige data vervangen door dummy data, waardoor je ons ook weer meer info kan geven.

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • _Piwi_
  • Registratie: December 2008
  • Laatst online: 21-11 23:44
De Query: SELECT users.*, users_profile.* FROM users, users_profile WHERE users.No_ = users_profile.UserNo_ AND users.groupNo_ = '%s' ORDER BY users_profile.Contact ASC LIMIT %s,%s

En de export van de 2 tabellen:

Users
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
  `No_` int(20) NOT NULL AUTO_INCREMENT,
  `OrderNo_` int(20) NOT NULL,
  `Type` int(10) NOT NULL,
  `ItemNo_` varchar(20) NOT NULL,
  `Description` text NOT NULL,
  `Description_2` text NOT NULL,
  `UnitOfMeasure` varchar(20) NOT NULL,
  `Quantity` decimal(38,0) NOT NULL,
  `UnitPrice` decimal(38,4) NOT NULL,
  `LineDiscountRate` decimal(38,4) NOT NULL,
  `VAT` decimal(38,4) NOT NULL,
  `Sent` decimal(36,0) NOT NULL DEFAULT '0',
  `UserNo_` int(10) DEFAULT NULL


Users_profile
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
  `UserNo_` int(10) NOT NULL,
  `CustomerNo_` varchar(20) NOT NULL,
  `Name` varchar(100) NOT NULL,
  `Name_2` varchar(100) NOT NULL,
  `Address` varchar(100) NOT NULL,
  `Address_2` varchar(100) NOT NULL,
  `Postcode` varchar(20) NOT NULL,
  `City` varchar(50) NOT NULL,
  `Country` varchar(50) NOT NULL,
  `Contact` varchar(100) NOT NULL,
  `Phonenumber` varchar(30) NOT NULL,
  `Mobilephonenumber` varchar(30) NOT NULL,
  `Faxnumber` varchar(30) NOT NULL,
  `VATRegistrationNo_` varchar(30) NOT NULL,
  `FixedDiscount` decimal(38,4) NOT NULL,
  `DiscountGroupCode` varchar(10) NOT NULL,
  `Delivery-Name` varchar(100) NOT NULL,
  `Delivery-Name_2` varchar(100) NOT NULL,
  `Delivery-Address` varchar(100) NOT NULL,
  `Delivery-Address_2` varchar(100) NOT NULL,
  `Delivery-Postcode` varchar(20) NOT NULL,
  `Delivery-City` varchar(50) NOT NULL,
  `Delivery-Country` varchar(50) NOT NULL,
  `Delivery-Contact` varchar(100) NOT NULL,
  `Delivery-Phonenumber` varchar(30) NOT NULL,
  `Comment` text,


Ik weet dat in een productieomgeving "not done" is. Maar in de testomgeving had ik nergens last van (maar daarin werd niet gesorteerd op Contact meer op Username).

Het rare is dat het niet overal is. Gezien op groep wordt geselecteerd.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Leading whitespace?

{signature}


  • HuHu
  • Registratie: Maart 2005
  • Niet online
Weet je zeker dat het klopt, want het veld Users.groupNo_ bestaat niet in je tabel.

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

Vraag me sowieso af of een JOIN niet beter/duidelijker is?

Last.fm | Code Talks


  • _Piwi_
  • Registratie: December 2008
  • Laatst online: 21-11 23:44
HuHu schreef op maandag 15 oktober 2012 @ 11:29:
Weet je zeker dat het klopt, want het veld Users.groupNo_ bestaat niet in je tabel.
Oh dan is dat weggevallen.

Ik heb wellicht het probleem al gevonden. Er lijkt toch nog whitespace te zijn maar met een controle in PHP kan ik dit niet vinden. Heeft mySQL hier toevallig een functie voor?

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ja.

Ik noemde al t probleem, dus je hebt amper 4 minuten naar string functions gezocht. Hint: functie voor string lengte heeft een logische naam. ;)

{signature}


  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

Meestal is hiervoor een trim() functie aanwezig.
Enkele vragen die je jezelf even moet stellen: Vanwaar komen die whitespaces? Lossen we dit best op via de trim, of gaan we ze toch best verwijderen?

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • HuHu
  • Registratie: Maart 2005
  • Niet online
Voordat je dit soort dingen in de database stopt moet je in PHP al een trim() doen. Je kunt iets als ORDER BY TRIM( users_profile.Contact ) ASC LIMIT doen, maar dat zal zeker traag worden. Beter is om je tabel op te schonen.

  • _Piwi_
  • Registratie: December 2008
  • Laatst online: 21-11 23:44
Dat ik trim kon vergeten... Bedankt! Ik ga mijn tabel even door deze functie heen halen :)

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 11:42

MueR

Admin Devschuur® & Discord

is niet lief

Beter fix je de manier waarop het de database in gaat.

Anyone who gets in between me and my morning coffee should be insecure.


  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
HuHu schreef op maandag 15 oktober 2012 @ 11:35:
Je kunt iets als ORDER BY TRIM( users_profile.Contact ) ASC LIMIT doen, maar dat zal zeker traag worden. Beter is om je tabel op te schonen.
MySQL kan met deze aanpak geen index op de kolom users_profile.Contact meer gebruiken. Op een hele kleine tabel maakt dit niet uit, maar zodra een index zinvol wordt, ga je performance inleveren.

MySQL kent geen functionele indexes, vandaar.

[ Voor 7% gewijzigd door cariolive23 op 15-10-2012 12:37 ]


  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 11:27

JaQ

cariolive23 schreef op maandag 15 oktober 2012 @ 12:36:
[...]

MySQL kan met deze aanpak geen index op de kolom users_profile.Contact meer gebruiken. Op een hele kleine tabel maakt dit niet uit, maar zodra een index zinvol wordt, ga je performance inleveren.

MySQL kent geen functionele indexes, vandaar.
En ik maar denken dat een order op een recordset bijna altijd in memory gaat? (Of kent mysql index organized tabels?).

Egoist: A person of low taste, more interested in themselves than in me

Pagina: 1