SQL variabelen afhankelijk van gegevens in tabel
Weet iemand of het mogelijk is om bepaalde velden van een tabel wel of niet uit te lezen, afhankelijk van of er iets in staat?
Voorbeeld situatie:
Ik heb een tabel met onder andere voorletters, tussenvoegsel, en achternaam in aparte velden.
Voorletters en tussenvoegsel kunnen leeg zijn. Is het nu mogelijk om de waarden aan elkaar te koppelen zodat ik in één keer de hele naam uit kan lezen? (rekening houdend met het feit dat voorletters en tussenvoegsels niet ingevuld hoeven zijn).
Als dat kan lijkt me dat een mooiere, overzichtelijkere oplossing dan controles uitvoeren met PHP.
Als dit mogelijk is dan zou ik echt niet weten waar ik op moet zoeken. Vandaar mijn vraag hier.
Gewijzigd op 22/06/2012 12:13:23 door Marco ----
waarom zo moeilijk willen doen? wannneer een gebruiker geen tussenvoegsel invult, zorg je dat er in de database ook niets komt te staan (dus ook geen NULL). wanneer je dan alle velden echot, krijg je dus gewoon de volledige naam die is ingevuld.
Als het mogelijk is wil ik alsnog graag weten hoe het zou kunnen. Al is het maar om mijn kennis te verrijken.
Wat je zegt klopt. Ik zou inderdaad alle velden kunnen echoën. Maar wat is dan het verschil tussen 'één' veld echoën die dan in SQL is gemaakt en alle velden echoën in PHP?
Quote:
zorg je dat er in de database ook niets komt te staan (dus ook geen NULL)
Dat kan niet, NULL = niks en niks = NULL. Niks in een dB kan niet, NULL is het toppunt van niks.
Je zal het veld dus op DEFAULT NULL moeten instellen.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
IF(voorletter IS NULL,
IF(tussenvoegsel IS NULL,
naam,
concat(tussenvoegsel, ' ', naam)
),
IF(tussenvoegsel IS NULL,
concat(voorletter, ' ', naam),
concat(voorletter, ' ', tussenvoegsel, ' ', naam)
)
)
IF(tussenvoegsel IS NULL,
naam,
concat(tussenvoegsel, ' ', naam)
),
IF(tussenvoegsel IS NULL,
concat(voorletter, ' ', naam),
concat(voorletter, ' ', tussenvoegsel, ' ', naam)
)
)
Gewijzigd op 22/06/2012 13:14:59 door Jeroen Jansen
Zou onderstaande query dan logisch zijn? Of maakt het allemaal niet zo veel uit?
SELECT CONCAT(voorletters, tussenvoegsel, en achternaam) AS klantnaam
Toevoeging op 22/06/2012 13:17:28:
Bedankt voor het voorbeeld, Jeroen.
SELECT CONCAT(voorletters, ' ', tussenvoegsel, ' ',achternaam) AS klantnaam
Code (php)
1
2
2
SELECT LTRIM(CONCAT(voorletters, ' ',
LTRIM(CONCAT(tussenvoegsel, ' ', achternaam)))) AS klantnaam
LTRIM(CONCAT(tussenvoegsel, ' ', achternaam)))) AS klantnaam
Edit: de haakjes stonden verkeerd
Gewijzigd op 22/06/2012 14:45:51 door Ger van Steenderen
Zonder LTRIM lijkt het ook goed te werken. Nu is er maar één spatie tussen voor- en achternaam, ook als er geen tussenvoegsel is. In ieder geval goed om te weten en in de gaten te houden. Bedankt.
LTRIM voorkomt 2 spaties voor de achternaam als er geen voorletters en tussenvoegsel zijn ingevuld, en inderdaad de extra spatie tussen voorletters en achternaam als er geen tussenvoegsel is ingevuld.