[MYSQL] LIKE met kolomnaam en wildcard gebruiken

Pagina: 1
Acties:

  • whistler
  • Registratie: April 2000
  • Laatst online: 05-10-2025
Ik wil de volgende query uitvoeren om de volledige naam van een medewerker op te halen die een bepaalde mededeling op mijn intranet plaatst. Dat werkt ook met de volgende query:

code:
1
SELECT mededelingen.titel, medewerkers.naam FROM mededelingen, medewerkers WHERE mededelingen.login = medewerkers.login ORDER BY mededelingen.uwhen DESC;


Maar nu wil het geval dat sommige mensen twee loginnamen hebben, omdat ze bijvoorbeeld een administrator en een medewerker-account hebben. In dat geval staan er twee loginnamen in de medewerkers tabel en zou ik dus met LIKE willen zoeken. Het zou dan ongeveer dit moeten worden:

code:
1
SELECT mededelingen.titel, medewerkers.naam FROM mededelingen, medewerkers WHERE mededelingen.login LIKE %medewerkers.login% ORDER BY mededelingen.uwhen DESC;


Maar dat werkt niet. Want ik kan wel LIKE gebruiken met een string, en zelfs wel met een kolom-naam maar dan niet met %-tekens. Dus de vraag is, hoe moet dat, en hoe is de syntax dan? Ik heb de voor de hand liggende dingen als '%'+medewerkers.loginnaam+'%', '%'&medewerkers.loginnaam&'%' allemaal geprobeerd en in de voorbeelden van LIKE in de MySQL documentatie gebruiken ze alleen maar strings. Iemand een idee?

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 22:06
code:
1
WHERE mededelingen.login LIKE '%medewerkers.login%'

:)

What do you mean I have no life? I am a gamer, I got millions!


  • whistler
  • Registratie: April 2000
  • Laatst online: 05-10-2025
Qua syntax gaat het goed, ik krijg geen foutmeldingen. Maar ik krijg ook geen resultaten meer. Ziet hij nu de kolom naam niet als een string?

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 22:06
whistler schreef op woensdag 01 november 2006 @ 15:34:
Qua syntax gaat het goed, ik krijg geen foutmeldingen. Maar ik krijg ook geen resultaten meer. Ziet hij nu de kolom naam niet als een string?
Ah, nu snap ik ook je probleem denk ik :) hij zoekt nu op resultaten die letterlijk lijken op 'medewerkers.login', maar je wilt de kolomwaarde daar natuurlijk in hebben.

What do you mean I have no life? I am a gamer, I got millions!


  • whistler
  • Registratie: April 2000
  • Laatst online: 05-10-2025
Precies! Maar hoe dat moet, daar kom ik niet achter.

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 22:06
Wat je wel kunt doen is het volgende, al durf ik niet te zeggen of het de meest nette oplossing is:
code:
1
WHERE mededelingen.login LIKE CONCAT('%', medewerkers.login, '%')

:)

What do you mean I have no life? I am a gamer, I got millions!


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Mysql kan vanaf versie 4.1 oid gewoon met de concatenation operator uit de SQL-specificatie overweg: ||
Dus eerlijk gezegd heb je niet de meest logische varianten geprobeerd ;)

Bij oudere versies moet je de concat-functie gebruiken.

[edit]
Blijkbaar kan MySQL 4.1 standaard nog niet met die || overweg... De concat-functie werkt iig wel.

[ Voor 18% gewijzigd door ACM op 01-11-2006 15:46 ]


  • whistler
  • Registratie: April 2000
  • Laatst online: 05-10-2025
@ACM, ik zei ook de meest voor de hand liggende, niet de logische ;) Maar in MySQL 5.1 werkt || ook niet, concat wel en daarmee lukt het.

@Morax, bedankt!!
Pagina: 1