Ik heb een tabel met stationsnamen, en ik wil een overzicht maken op de beginletter.

Nu is dit 'a piece of cake' voor Schiedam, Sittard etc...:


SELECT id, afk, place, is_station
	FROM locations
		WHERE place LIKE 's%'
		AND is_station = '1'


Maar hoe kunnen we het eigenwijze 's-Hertogenbosch en 't Harde bij de T of H krijgen?
En wat is wijsheid in de Nederlandse taal? :-)
Als je er op wilt zoeken moet je misschien ook nog rekening houden met dubbele namen?
's Hertogenbosch/Den Bosch etc.

Je kun zoeken op het eerste Hoofdletter

preg_match( '/[A-Z]/', $string, $matches, PREG_OFFSET_CAPTURE );
@Rob: En die 'c' dan?

Aha, gevonden.... Case sensitive :-)
Op ns.nl kun je ook Hertogenbosch ('s), Den Bosch of 's-Hertogenbosch invullen. Dus misschien is het sowieso een goed idee om meerdere benamingen voor hetzelfde station toe te staan.

Daarnaast zou ik persoonlijk geen case-sensitive vergelijkingen doen, ain't nobody got time for that.

Je zou kunnen controleren op een optionele initiële apostrof?
WHERE place LIKE '^\'?<zoekterm>'

Waar <zoekterm> de ingetoetste zoekterm is.

Maar eigenlijk heb je helemaal geen speciale modificaties nodig als je gewoon meerdere (correcte) schrijfwijzen voor een plaatsnaam hebt die vervolgens één (fysieke) plaats produceren. Misschien is dat een betere oplossing dan een complete custom regexp voor dit doel.
Ik zie inderdaad dat de NS API ook Synoniemen toestaan waar
"Hertogenbosch (\u0027s)", "Den Bosch"
uitrolt. Ik ga eens kijken hoe ik dit erin ga integreren.

Reageren