Toon posts:

[sql]waarde uit row waarin meerdere namen in deze row staan

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil controleren of een bepaalde naam in de database voorkomt, echter de database heeft 2 rijen die gecontroleert moeten worden namelijk row:

uname1
en
uname2

In rij uname1 zit gelukkig maar 1 naam en is geen probleem maar in uname 2 zitten 4 namen, gescheiden door een spatie, voorbeeld: jan piet klaas willem
(het is een bestaande db, dit mag niet gewijzigd worden)

Nu wil ik dus eigenlijk de volgende query uitvoeren maar ik zit dus met het probleem van die 4 namen in 1 row:

code:
1
sql_query "SELECT * FROM tabel1 WHERE uname1='piet' or uname2='piet' ";


De query opzich werkt wel alleen vind je natuurlijk niets met "piet" in row uname2 en dat is net wel de bedoeling.

Nu zoek ik dus een sql query die "piet" dus wel direct uit de rij uname2 haalt.
Ik heb al eens gezocht op mysql.com en php.net maar kan niets vinden waarmee dit kan.
Ik kan zelf helaas geen correcte query vinden waarmee dit kan en begin me af tevragen of het eigenlijk wel kan?

Mijn opzet was echt dat het direct vanuit sql moest kunnen.

Iemand een idee of het kan en zoja welke query moet ik daarvoor gebruiken dan, na heel wat uurtjes proberen en zoeken ben ik helaas geen stap verder gekomen tot nu toe.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 14:53

NMe

Quia Ego Sic Dico.

Ten eerste is het geen row, maar een kolom. Verder is de oplossing van je probleem vrij basic, dus raad ik je aan even te gaan kijken op deze sites:
www.sqlcourse.com
www.sqlcourse2.com

Je oplossing:
code:
1
2
3
4
SELECT *
FROM tabel1
WHERE uname1='piet'
OR uname2 LIKE '%piet%'

Alleen krijg je met deze oplossing ook een veld als "pieternella" terug. Wat je dan kan doen is het volgende:
code:
1
2
3
4
5
6
SELECT *
FROM tabel1
WHERE uname1='piet'
OR uname2 LIKE 'piet %'
OR uname2 LIKE '% piet %'
OR uname2 LIKE '% piet'


Edit: een database opzet waar er 4 gebruikersnamen in 1 veld staan doet mij sowieso wat vreemd aan. Lees asjeblieft ook wat over normaliseren van je database. :)

[ Voor 50% gewijzigd door NMe op 22-07-2004 03:44 ]

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


Verwijderd

zoek eens op "LIKE"

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Afgezien van dat dit basic-SQL-kennis is ben ik ook wel benieuwd naar je antwoord op deze vraag:
NMe84 schreef op 22 juli 2004 @ 03:40:
Edit: een database opzet waar er 4 gebruikersnamen in 1 veld staan doet mij sowieso wat vreemd aan. Lees asjeblieft ook wat over normaliseren van je database. :)
Want volgens mij klopt er inderdaad geen bal van je model als je 4 white-space-separated namen in 1 field hebt hangen :)

Professionele website nodig?


Verwijderd

Topicstarter
OK mijn antwoord dan.

Dit was een veld met maar 1 naam, echter het was nodig om meerdere namen te kunnen toevoegen, het aanmaken van nieuwe kolommen voor de nieuwe namen was een te grote ingreep in het reeds bestaande script.
Het aanpassen van enkel en alleen deze kolom was/is een goede optie, maargoed mijn probleem is opgelost en alles werkt zoals ik wilden.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 22 juli 2004 @ 22:26:
OK mijn antwoord dan.

Dit was een veld met maar 1 naam, echter het was nodig om meerdere namen te kunnen toevoegen, het aanmaken van nieuwe kolommen voor de nieuwe namen was een te grote ingreep in het reeds bestaande script.
Het aanpassen van enkel en alleen deze kolom was/is een goede optie, maargoed mijn probleem is opgelost en alles werkt zoals ik wilden.
Uh oh het pleisterconcept zoals dat heet :X

Je bespaart nu 30 minuten door een ranzige oplossing te implementeren ipv de goede. Dat doe je morgen weer, overmorgen weer en de dag erna ook. Uiteindelijk heb je dan na een maand een stuk code dat van pleisters op pleisters aan mekaar hangt, maar wel 10 manuur bespaard \o/

....die je over een maand direct weer kwijt bent als je 2 weken bezig bent met door de onbegrijpelijke spaghetticode te graven om een wijziging van eigenlijk 10 minuten aan te brengen :/

'Te grote ingreep' of 'teveel moeite' is nooit een excuus om brakke code te schrijven. Do yourself and the people after you a favor :)

Professionele website nodig?


Verwijderd

NMe84 schreef op 22 juli 2004 @ 03:40:
code:
1
2
3
4
5
6
SELECT *
FROM tabel1
WHERE uname1='piet'
OR uname2 LIKE 'piet %'
OR uname2 LIKE '% piet %'
OR uname2 LIKE '% piet'
Nog niet helemaal correct, want als het tweede veld alleent 'piet' is (met niets ervoor of erachter), matcht deze niet. Er moet dus nog een check bij :-

code:
1
2
3
4
5
6
7
SELECT *
FROM tabel1
WHERE uname1 = 'piet'
OR uname2 = 'piet'
OR uname2 LIKE 'piet %'
OR uname2 LIKE '% piet %'
OR uname2 LIKE '% piet'


Ieks... wat vies :/

[ Voor 12% gewijzigd door Verwijderd op 23-07-2004 09:59 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Not to mention hopeloos traag omdat een index niets kan bakken van een LIKE met leading %.... :X

Professionele website nodig?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 14:53

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 23 juli 2004 @ 09:59:
Nog niet helemaal correct, want als het tweede veld alleent 'piet' is (met niets ervoor of erachter), matcht deze niet. Er moet dus nog een check bij :-
Ik ging ervanuit dat er altijd 4 namen in dat veld staan, zoals TS ook al aangaf. ;)
Ik heb dan ook meteen mijn handen gewassen toen ik die query geschreven had. :+

@B3rt: neem het advies van curry684 ter harte, want het is geen slecht advies. :) Je zal hem, wanneer je die simpele aanpassing in je datamodel doet, dankbaar zijn, als je over 3 maanden nog steeds je eigen code snapt. :)

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


Verwijderd

Topicstarter
Ja heb met de eigenaar overlegt en besloten om het meteen goed te doen.
Inmiddels is de rewrite klaar en werkt, dit nu zonder meerdere namen in 1 veld.
Was wel veel werk, maargoed het werkt in iedergeval een stuk beter nu.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
laat me raden, je hebt nu vier kolommen in plaats van 1?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Meerdere namen in een veld? , dat betekent dat je meerdere namen binnen EEN kolom had?

Je zult bedoelen zonder dubbele kolommen in de tabel, maar netjes met gebruik van een koppeltabel en een ander tabel natuurlijk.

[ Voor 28% gewijzigd door dusty op 25-07-2004 17:05 ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22-05 21:28

MBV

"Always write your code as if the one who's going to maintain it is a violent psychopath who knows where you live". Zonder stotteren 100x opzeggen, TS! :p

Geloof me, wat curry zegt is 110% waar. Ik wilde dat ik dat eerder door had op mijn stage, dan had ik het product opnieuw geschreven ipv het product aanpassen totdat het werkt. Het was beter te onderhouden geweest, met een beter datamodel, hogere performance enz. En ik had het in dezelfde tijd kunnen doen als het aanpassen.

Verwijderd

Topicstarter
Grijze Vos schreef op 25 juli 2004 @ 17:04:
laat me raden, je hebt nu vier kolommen in plaats van 1?
Nope, nieuwe tabel aan gemaakt met daarin de gebruikers en tevens de userrights per gebruiker.

Voorheen was het alleen mogelijk dat 1 gebruiker alle rechten had en een 2de gebruiker (wat er dus 4 moesten worden) andere rechten.
Deze 4 extra gebruikers hadden dan allemaal de zelfde rechten.

Met de huidige oplossing kun je oneindig veel gebruikers toevoegen en per gebruiker specificeren wat ie wel en niet mag.
Pagina: 1