Toon posts:

MYSQL SORT, van een tabel varchar waarin INT staan.

Pagina: 1
Acties:
  • 34 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoi..
Ik heb een probleem.
Ik heb een flinke database met een heleboel artikelen erin.
Via php importeer ik een csv bestandje en die gooit hij in de database.
En nu wil ik via php een query uitvoeren die vervolgens een deel van mijn artikelen oproept.
Dat is allemaal het probleem niet, maar ik wil ze meteen laten schikken op prijs.
Mijn database heet PCflow, en de tabel heet prijzen.
De kolommen die ik gebruik zijn Artikelcode, Omschijving, Omschrijving2 en Verkoop.
Alle kolommen zijn varchar, dit komt omdat het anders te lastig is om via csv te importeren.
Voorbeeld van een prijs zoals ze in de kolom staan: 35,80
Nu wil ik dus sorteren op de Verkoop.
Dit heb ik al op een aantal verschillende manieren geprobeerd:
vb:
select replace(Verkoop, '.', '') as Verkoopp from prijzen order by convert(Verkoopp, signed) DESC
Er stonden ook nog punten bij de duizendtallen die heb ik dus via de replace weggehaald. Maar ik blijf met het probleem dat mijn Verkoop niet word geschikt op volgorde.
HELP!!!:D :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mja, dit is natuurlijk symptoombestrijding. Er is maar 1 juiste oplossing: niet voor alles varchar (mis)bruiken maar gewoon de juiste types. Je krijgt anders gewoon 'tekst' sortering, wat betekent dat je een volgorde krijgt als:

code:
1
2
3
4
11.00
 2.00
21.00
 3.00

[ Voor 34% gewijzigd door RobIII op 22-03-2007 16:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:27

mulder

ik spuug op het trottoir

Dus je maakt jezelf het moeilijk zodat je op een ander momentje makkelijk kan doen ;) Als je nou gewoon zorgt dat Verkoop in een numerieke veld terecht komt.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Dat wil ik wel....
Maarrrrr:P
Als ik via php een csv bestand importeer en deze laat inserten.
Dan gebruik ik de commando's explode en implode.
En het maakt hem helemaal niet uit waar welk veldje komt te staan:

for($i=0; $i<sizeof($fcontents); $i++) {
$line = trim($fcontents[$i]);
$arr = explode(";", str_replace("'" , "`",$line), 24);
#if your data is comma separated
# instead of tab separated,
# change the '\t' above to ','

$sql = "insert into prijzen values ('".
implode("','", $arr) ."')";
mysql_query($sql);

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

dus :?

In een csv zitten toch ook column names; aan de hand daarvan kan je toch bepalen of het een int moet worden en er dus geen ' ' omheen moeten?
[edit]
er is overigens een speciale csv inleesfunctie in php: fgetcsv

[ Voor 26% gewijzigd door TheRookie op 22-03-2007 17:00 . Reden: + linkje naar fgetcsv ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Als je de volgorde van kolommen in de cvs weet dan weet je ook welke kolommen je wel en niet moet voorzien van aanhalingstekens bij het inserten. Lijkt me een kleine moeite om dat eenmalig te maken zodat je DB in elk geval voorzien is van de juiste datatypes en zaken als sorting op de normale manier kunnen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Als je kijkt naar de code die ik gebruik om te inserten gooi ik gewoon alles in 1 query.
En loopt gewoon de lijnen af. Dat betekend dat ik mijn insert op een andere manier moet laten opbouwen. En vervolgens moet gaan schikken op de kolomnamen. Om wel of geen '' te gaan gebruiken. Klopt??

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Klopt als een bus :)
1) Bepaal kolomnamen
2) loop door csv regels heen en kijk als kolomnaam == verkoop dan geen '', anders wel ''
3) je kan dan alsnog een implode doen

Verwijderd

Topicstarter
Iemand dan enig idee hoe ik dat zou kunnen opbouwen??:P

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Dude..... dat is gewoon een regelrecht script request. Je bevestig nu mijn twijfels dat het script niet helemaal van jezelf afkomt. Zoals je nu zelf de oplossing uitlegt is het echt behoorlijk eenvoudig om dit zelf in elkaar te zetten.

Als je Programming Beleid en dan met name Programming Beleid - De Quickstart eens door zou willen lezen graag. Dan weet je wat we van je verwachten van je op het moment dat je een topic opent.

[ Voor 151% gewijzigd door Creepy op 22-03-2007 17:15 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.