Ik heb het volgende probleem

ik heb twee velden in een tabel prijs

veld 1 = prijs
veld 2 = opties

nu wil ik sorteren oplopend en aflopend op de prijs en op opties waarbij de prijs altijd bovenaan komt te staan.

vb

SELECT * FROM `prijs` ORDER BY `prijs` desc , opties desc

output

1000,00
99,00
1,1
jan
ed
ad

dit is goed

vb2

SELECT * FROM `prijs` ORDER BY `prijs` asc, opties asc

output

ad
ed
jan
1,1
99,00
1000,00


dit is fout. Ik wil eerst altijd de prijs bovenaan hebben maar wel op deze mannier gesorteerd

dus

1,1
99,00
1000,00
ad
ed
jan

is er een optie om het veld prijs altijd als eerste bovenaan de sortering te krijgen of moet ik dit met twee queries doen.

Gr Creator
Volledig eigen systeem of een DB door je strot gedrukt gekregen?

Als eigen systeem is :
DB ontwerp nakijken voor dat je ook maar iets aanraakt


Als je hem gekregen hebt :
Ik heb nu al medelijden met je want je gaat het nog enorm moeilijk krijgen denk ik.
Klaasjan Boven schreef op 24.09.2007 11:23

Wat voor type heeft rpijs bij jou? VARCHAR Denk ik? Dan kan je er sowieso niet goed op sorteten want dan krijg je die
1
10
100
2
21
215545848
3
enz..

En als je had gekeken naar de topicstart (het 1e bericht) dan zag je:
1,1
99,99
1000,00
als volgorde aangegeven, waarom denk je dat het dan een varchar is?
Jacco schreef op 24.09.2007 11:49
Volledig eigen systeem of een DB door je strot gedrukt gekregen?

Als eigen systeem is :
DB ontwerp nakijken voor dat je ook maar iets aanraakt


Als je hem gekregen hebt :
Ik heb nu al medelijden met je want je gaat het nog enorm moeilijk krijgen denk ik.

het is een volledig eigen systeem met eigen database. Kan dus alles zelf aanpassen




Okey dan zou ik eens beginnen met de aanpassing die ik sugereerde :).

En heb je toevallig een (excel) datamodel :)?

Zoja kun je me dan ff een link pmen (verveel me en als het niet te veel werk is zal ik eens kijken of ik er wat van kan maken :))
hier een test database



/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES 'latin1' */;

CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `test`;

CREATE TABLE `prijs` (
`Id` int(11) NOT NULL auto_increment,
`prijs` decimal(11,2) default NULL,
`prijs_v` varchar(20) default NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;

INSERT INTO `prijs` VALUES (1,5400.77,NULL);
INSERT INTO `prijs` VALUES (2,0.12,NULL);
INSERT INTO `prijs` VALUES (3,100,NULL);
INSERT INTO `prijs` VALUES (4,1200,NULL);
INSERT INTO `prijs` VALUES (5,NULL,'pereserveerd');
INSERT INTO `prijs` VALUES (6,934,NULL);
INSERT INTO `prijs` VALUES (7,NULL,'n.v.t.');
INSERT INTO `prijs` VALUES (8,NULL,'h.u.j');
INSERT INTO `prijs` VALUES (9,200,NULL);
INSERT INTO `prijs` VALUES (10,NULL,'h.a.s');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

ikzelf test een querie met phpmyadmin


hier heb je er twee

SELECT *
FROM `prijs`
ORDER BY `prijs` ASC , prijs_v ASC

waardoor de prijs_v bovenaan komt moet dus omgedraait zijn

SELECT *
FROM `prijs`
ORDER BY `prijs` DESC , prijs_v ASC

geeft de prijs tabel bovenaan

Gr Creator
okey HEEL fout database model.

Ik raad je aan het volgende te doen


Items
item_id <- primary
prijs

Opties
optie_id <- primary
optie_naam

optie_item
optie_id <- primary
item_id <- primary

Iets van deze strekking. Ziet er nu omslachtig uit. Maar ga je later plezier van hebben :)

Het wordt veel gemakkelijker om nieuwe opties toe te voegen aan je tabel, en ook om opties aan items te koppelen.

Ook zoeken naar een item met bijvoorbeeld optie "i" wordt heel erg vergemakkelijkt!

Reageren