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

order by werkt ineens niet meer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey,

Ik heb sinds de update van pcextreme problemen met mijn website:
http://www.vandenberg-nl....pcextreme.nl/a2/index.php

De stand die je daar ziet zou als volgt gesoorteerd moeten worden:
PHP:
1
mysql_query("SELECT * FROM stand where seizoen = 'zaalseizoen' order by 'punten' DESC, 'gespeeld'")

Sinds de update van pcextreme werkt het order by gedeelte niet meer. Nu zet hij de laatst ingevoerde gewoon bovenaan.
Heeft iemand enig idee hoe dit komt want volgens hun zal ik wel gewoon ergens iets moeten veranderen.

Hier het bericht dat ik van pcextreme kreeg:
SQL6 is zojuist vervangen door een andere machine. Hierbij is MySQL ge-upgrade van versie 5.0.22 naar 5.0.38 Dit mag in principe niet veel uitmaken, de major versie is het zelfde gebleven, namelijk 5.

Alvast bedankt voor je hulp!!

Verwijderd

Ik weet niet precies hoe je je database in elkaar hebt zitten, maar ik heb het volgende gemaakt om het te testen:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE stand
(
    id INT(10) AUTO_INCREMENT,
    seizoen VARCHAR(50),
    punten INT(10),
    gespeeld INT(10),
    PRIMARY KEY(id)
);

INSERT INTO stand SET seizoen = 'zaalseizoen', punten = 1, gespeeld = 2;
INSERT INTO stand SET seizoen = 'zaalseizoen', punten = 1, gespeeld = 1;
INSERT INTO stand SET seizoen = 'zaalseizoen', punten = 2, gespeeld = 2;
INSERT INTO stand SET seizoen = 'zaalseizoen', punten = 2, gespeeld = 3;
INSERT INTO stand SET seizoen = 'zaalseizoen', punten = 1, gespeeld = 3;


Als je nu de door jouw geposte query invoert, krijg je het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Gegenereerd door:
    phpMyAdmin 2.11.0 / MySQL 5.0.45-community-nt

SQL-query:
    SELECT * FROM stand where seizoen = 'zaalseizoen' order by 'punten' DESC , 'gespeeld' LIMIT 0, 30 ;

Rijen:
    5

id        seizoen         punten    gespeeld
1         zaalseizoen     1         2
2         zaalseizoen     1         1
3         zaalseizoen     2         2
4         zaalseizoen     2         3
5         zaalseizoen     1         3


Dit komt door het volgende:
Je gebruikt in je query - bij order by - gespeeld en punten tussen aanhalingstekens, dit wil zeggen dat ze gezien worden als string en niet als de waarden die de velden met die naam bevatten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Gegenereerd door:
    phpMyAdmin 2.11.0 / MySQL 5.0.45-community-nt

SQL-query:
    SELECT punten, 'punten', gespeeld, 'gespeeld' FROM stand where seizoen = 'zaalseizoen' order by 'punten' DESC , 'gespeeld' LIMIT 0, 30 ;

Rijen:
    5

punten   punten     gespeeld     gespeeld
1        punten     2            gespeeld
1        punten     1            gespeeld
2        punten     2            gespeeld
2        punten     3            gespeeld
1        punten     3            gespeeld

(de eerste veldnaam is zonder aanhalingstekens, de tweede met)


Als je de aanhalingstekens weg haalt, dan is je probleem opgelost en krijg je het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Gegenereerd door: 
    phpMyAdmin 2.11.0 / MySQL 5.0.45-community-nt

SQL-query:
    SELECT * FROM stand where seizoen = 'zaalseizoen' order by punten DESC , gespeeld LIMIT 0, 30 ;

Rijen:
    5

id     seizoen         punten     gespeeld
3      zaalseizoen     2          2
4      zaalseizoen     2          3
2      zaalseizoen     1          1
1      zaalseizoen     1          2
5      zaalseizoen     1          3



Niet meer vergeten hè!? :D

  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 01-11 10:36
Je gebruikt de verkeerde quotes om je veldnamen. Zoals Gdo0 hierboven al zei kun je ze gewoon weglaten, dan werkt het. Als je er wel quotes omheen wilt zetten (dat kan bijvoorbeeld omdat je speciale karakters of een reserved word als tabelnaam hebt) dan moet dat niet de gewone enkele quote, maar de back-quote zijn. Dus ` ipv '.

PHP:
1
2
mysql_query("SELECT * FROM stand where seizoen = 'zaalseizoen' order by punten DESC, gespeeld") 
mysql_query("SELECT * FROM `stand` where `seizoen` = 'zaalseizoen' order by `punten` DESC, `gespeeld`")


Bovenstaande regels werken in dit geval dus beide. Om zaalseizoen staan wel de normale quotes want dat is een literal string.
An identifier may be quoted or unquoted. If an identifier contains special characters or is a reserved word, you must quote it whenever you refer to it. Special characters are those other than the set of alphanumeric characters from the current character set, “_”, and “$”. Reserved words are listed at Section 7.3, “Reserved Words”. (Exception: A reserved word that follows a period in a qualified name must be an identifier, so it need not be quoted.)
The identifier quote character is the backtick (“`”).

Link naar bron: MySQL documentatie

The sentence below is true.
The sentence above is false.