Ik heb een vraagje m.b.t. mijn website Wereld van Oranje. Ik heb een database met nieuwsberichten én een database met gegevens over sporters.
In die berichten gebruik ik bijvoorbeeld de naam Piet Jansen en dan wil ik dat als ik die tekst typ, dit automatisch een link wordt naar het profiel van Piet Jansen. Is dit mogelijk en zo ja, hoe kan ik dit het makkelijkst aanpakken? Zo niet, op welke manier kan dit wél redelijk eenvoudig, zonder iedere keer <a href=huppeldepup...> in te hoeven tikken voor een naam?
Oké, die snap ik niet helemaal, maar daar zal ik vanmiddag eens even naar kijken...
De DB met sportersgegevens is als volgt opgebouwd: voornaam, tussenvoegsel, achternaam. Dus op het moment dat ik bijv. Piet de Vries intik, moet ie zowel op voor, tussen als achternaam zoeken.
Dus als ik het goed begrijp, tik ik dan [profiel]Piet de Vries[/profiel] en dan vervangt de regel die je tikte het door de link naar profiel.php?id= etc. Tenminste, als ik dat natuurlijk correct aangeef...
Mjah, dat laatste is geen goed idee, dat schiet niet op.
Ik zou natuurlijk een kolom 'complete naam' in de DB kunnen invoeren, of kunnen zoeken op 'voornaam+tussen+achternaam', dus daar ga ik eens even naar kijken...
Wanneer jij een lap tekst invoert, hoe moet jouw query nu weten wat nu precies de naam is? Voorbeeldje: "De fiets die vorige week aan Jan de Vries is verkocht, is deze week gestolen."
Jij en ik herkennen 'Jan de Vries' als een naam, zelfs als er geen hoofdletters worden gebruikt, maar voor jouw script is 'Jan de Vries' hetzelfde als 'is deze week'. Tuurlijk, er worden andere karakters gebruikt, maar het blijft tekst die voor jouw script geen enkele betekenis heeft. Jij kent er een betekenis aan toe, bv. dat een stukje tekst een naam is.
Wanneer jij niet weet of een naam in de database staat en welk id deze heeft, gebruik dan in elk geval een tag om aan jouw script te vertellen wat nu de naam is waarop moet worden gezocht. Bv. "De fiets die vorige week aan [naam]Jan de Vries[/naam] is verkocht, is deze week gestolen."
Wanneer deze naam dan in de database staat, kun je met een regex een link maken, is de naam niet bekend, dan doe je er niets mee. De tags toon je uiteraard niet.
Tip: De regex om een hyperlink te maken en de query om de boel te matchen, voer je uit wanneer de tekst wordt opgehaald uit de database om te worden getoond op het scherm. Doe dit vooral niet bij het invoeren of updaten, dit gaat problemen opleveren wanneer namen worden verwijderd of toegevoegd.
Wanneer jij een lap tekst invoert, hoe moet jouw query nu weten wat nu precies de naam is? Voorbeeldje: "De fiets die vorige week aan Jan de Vries is verkocht, is deze week gestolen."
Er staat niet voor niets 'newbie' onder mijn naam :-P Maar inderdaad, dat ben ik met je eens!
Hoe kan ik het best beginnen om dit te doen? Met bepalen van zoekvoorwaarde, dus de naam waarop gezocht moet worden. Heb ik de DB ook een kolom 'sportnaam', bijv. De Vries, staan, of is het mogelijk op voornaam+tussenvoegsel+achternaam te zoeken?
Uiteraard. Als je drie van die velden in je DB hebt. Een query ziet er dan bijvoorbeeld zo uit:
SELECT
voornaam, tussenvoegsel, achternaam
FROM
tabelnaam
WHERE
voornaam LIKE '%zoekwoord%'
OR
tussenvoegsel LIKE '%zoekwoord%'
OR
achternaam LIKE '%zoekwoord%'
Ja, oké. Dat klopt. Maar wat te doen met 'van de' etc. etc. Want dan heb je voornaam (Piet)-tussen (de)-achternaam (Vries), dat lukt nog wel. Maar als je dan ook nog voornaam (Piet)-tussen (van)-tussen (de)-achternaam (Vries)... Dus ik gok dat het toch maar gewoon een kolommetje 'complete naam' moet worden...
Volgens mij is het niet nodig om een kolom 'complete_naam' aan te maken. Je kunt in de query de kolomnamen met CONCAT() aan elkaar plakken. Het lijkt mij dat je daar ook op kunt vergelijken:
SELECT
id
FROM
tabelnaam
WHERE
CONCAT(voornaam, ' ', tussenvoegsel, ' ', achternaam) = 'Piet de Vries'
OR
CONCAT(voornaam, ' ', achternaam) = 'Piet Vries'
Hou even de extra spaties en tussenvoegsel in de gaten. Ik denk dat je nog beter met php kunt bepalen uit hoeveel woorden de naam bestaat en dan altijd het eerste woord als voornaam gebruiken en het laatste als achternaam. De rest gebruik je dan als tussenvoegsel. Op basis van dit resultaat stel je dan in php de WHERE-clausule samen, dus mét of zónder de vergelijking op tussenvoegsel. Dat is fraaier dan een OR in de WHERE.