[SQL] (PHP and MySQL) select ... like 0 tm 9

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dexter07051982
  • Registratie: November 2001
  • Laatst online: 16-07 09:34
hoi,

voor het maken van een website waar al mijn films op staan, ben ik bezig met php en mysql. Nu wil ik graag mijn films kunnen sorteren. Bijv. Alle films die met een 'A' Beginnen. (das niet zo moeilijk, namelijk gewoon een query uitvoeren:
code:
1
Select ... Where titel like 'A%'

Aangezien ik ook een aantal films heb die beginnen met een getal (bijv. "10 thing i hate about you") wil ik deze graag in 1 groep weer geven.

Nu zou ik dit natuurlijk kunnen doen door voor ieder getal een apparte Like in te voegen in de query,
maar dit lijkt mij een niet zo nette manier.
code:
1
Select... Where titlel like '1%' OR titel like '2%' ...


Kan dit ook op een nette (en liefst ook snelle) manier?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Gebruik MySQL Regular Expressions als je versie dat toestaat. En anders zul je toch echt een heel uitgebreide WHERE nodig hebben met 10 LIKE statements. :)

code:
1
2
SELECT ..
WHERE veld REGEXP '^[0-9]'

Dat dus. :P

[ Voor 14% gewijzigd door NMe op 13-02-2005 18:29 ]

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

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 22:40
Of een WHERE SUBSTRING(Titel, 1, 1) IN ('0','1',...,'9') ?

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

nescafe schreef op zondag 13 februari 2005 @ 18:30:
Of een WHERE SUBSTRING(Titel, 1, 1) IN ('0','1',...,'9') ?
IN is bij mijn weten nogal tijdrovend. Regular expressions ook hoor, daar niet van. Ik denk dat ik straks maar even ga benchmarken wat sneller is. Al vind ik een regexp sowieso netter om te gebruiken. :)

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

  • dexter07051982
  • Registratie: November 2001
  • Laatst online: 16-07 09:34
De regex worden ondersteund.
(wat betreftd de substring heb ik niet geprobeerd. Ik vind de regex een netere en duidelijkere oplossing)

Mijn dank is groot voor al uw medewerking. :)

edit:

zijn dus meer mensen met mij eens zie ik nu :P

De snelheid zal wel niet zo heel veel verschil in zitten. De regex is in mijn geval snel genoeg (ruim)(zoveel films heb ik nu ook weer niet, zijn er geen duizenden, nog geen eens 100 voor het geval iemand het interresseerd :O)

[ Voor 45% gewijzigd door dexter07051982 op 13-02-2005 18:50 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:04
dexter07051982 schreef op zondag 13 februari 2005 @ 18:23:
hoi,

voor het maken van een website waar al mijn films op staan, ben ik bezig met php en mysql. Nu wil ik graag mijn films kunnen sorteren. Bijv. Alle films die met een 'A' Beginnen. (das niet zo moeilijk, namelijk gewoon een query uitvoeren:
Dat is niet sorteren, maar filteren, en daar heb je helemaal geen subquery voor nodig. Een WHERE is geen subquery.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

IN is inderdaad niet het allersnelste (de db moet de juiste index langs voor alle items in de IN lijst), en REGEXP is MySQL only. Niet erg als je bij MySQL blijft, maar ook weer niet handig als je 't wilt omzetten naar PosgreSQL, MSSQL, etc.
code:
1
where veld < 'A' and veld >= '0'
is standaard SQL, en waarschijnlijk nog sneller ook.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 13 februari 2005 @ 23:08:
IN is inderdaad niet het allersnelste (de db moet de juiste index langs voor alle items in de IN lijst), en REGEXP is MySQL only. Niet erg als je bij MySQL blijft, maar ook weer niet handig als je 't wilt omzetten naar PosgreSQL, MSSQL, etc.
code:
1
where veld < 'A' and veld >= '0'
is standaard SQL, en waarschijnlijk nog sneller ook.
Het gaat sowieso niet om het hele veld, maar om een substring, en die substring functie is volgens mij ook niet in elk SQL-dialect hetzelfde. Mooi streven dus, maar volgens mij gaat dat soort compatibiliteit je niet lukken. :)

@whoami: ik zie nergens dat TS een subquery wilde gebruiken. ;)

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

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

@NMe:

Je zegt nu wel dat het om het hele veld gaat, maar kijk nu eens welke strings (ook langere) allemaal matchen met die criteria?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1