[SQL] dezelfde velden met andere waarden combineren

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Repsaj_Nav
  • Registratie: Juni 2006
  • Laatst online: 15-09 14:54

Repsaj_Nav

Hallo, ik ben Jasper

Topicstarter
Ik heb X resultaten, die helemaal hetzelfde zijn op één veld na. Deze verschillende waarden wil ik nu laten samenvoegen in één veld.

Om het wat duidelijker te maken: in plaats van dit:
salaris | naam
==============
30000   | Piet
30000   | Jan
Wil ik dit:
salaris | naam
==============
30000   | Piet, Jan
Ik zou dit natuurlijk met php kunnen doen, maar dat is uitermate smerig. Is hier ook een SQL-oplossing voor?

Ik heb gezocht op Google, maar ik vrees dat ik de verkeerde woorden heb gebruikt of iets onmogelijks wil.

Alvast bedankt voor jullie hulp!

Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat je "group by" zoekt.

Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
Waarom is het smerig om dat met php op te lossen?

Met je SQL-query haal je de informatie op en met php interpreteer je het. Wat is daar raar aan?

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

AlainS schreef op vrijdag 16 januari 2009 @ 21:49:
Waarom is het smerig om dat met php op te lossen?

Met je SQL-query haal je de informatie op en met php interpreteer je het. Wat is daar raar aan?
Op zich snap ik de vraagstelling wel. En ik denk dat dat anders is als jij denkt dat dat is.

De TS bedoeld een query, die dus niet 2 rijen terug geeft bij loon X voor Pietje en Jantje.
Hij wil dat SQL zélf dit doet, zonder tussenkomst van PHP. Duidelijker kan hij het echt niet omschrijven.

Overigens is het ook niet echt duidelijk van welk SQL-programma dit bedoeld is.

Maar volgens mij is er maar 1 echte oplossing en dat is een WHERE clausule.

SQL:
1
SELECT `name` FROM `table` WHERE `salary` = X;
Waar de X dan natuurlijk het salaris is.

Acties:
  • 0 Henk 'm!

  • Repsaj_Nav
  • Registratie: Juni 2006
  • Laatst online: 15-09 14:54

Repsaj_Nav

Hallo, ik ben Jasper

Topicstarter
Nee, als ik een GROUP BY doe, verdwijnt het resultaat met Jan.
AlainS schreef op vrijdag 16 januari 2009 @ 21:49:
Waarom is het smerig om dat met php op te lossen?

Met je SQL-query haal je de informatie op en met php interpreteer je het. Wat is daar raar aan?
Oké, het is niet zozeer smerig, maar het blijft zo dat er dan een heleboel dezelfde informatie 2x wordt verstuurd. Daarom dacht ik dat het vanwege de performance (ook al zou het erg weinig schelen) beter zou zijn om het in SQL samen te voegen.

Is dat mogelijk?

Edit:
GJtje schreef op vrijdag 16 januari 2009 @ 21:59:
[...]
Op zich snap ik de vraagstelling wel. En ik denk dat dat anders is als jij denkt dat dat is.

De TS bedoeld een query, die dus niet 2 rijen terug geeft bij loon X voor Pietje en Jantje.
Hij wil dat SQL zélf dit doet, zonder tussenkomst van PHP. Duidelijker kan hij het echt niet omschrijven.

Overigens is het ook niet echt duidelijk van welk SQL-programma dit bedoeld is.

Maar volgens mij is er maar 1 echte oplossing en dat is een WHERE clausule.

SQL:
1
SELECT `name` FROM `table` WHERE `salary` = X;
Waar de X dan natuurlijk het salaris is.
Ik gebruik MySQL. De query is natuurlijk een stuk ingewikkelder dan ik hier geplaatst heb, ik begin met een gebruiker en dan wordt gekeken welke groepsleiders in dat project zitten (via allemaal referentie-tabellen). Dat is niet alle informatie die ik nodig heb, ik heb bijvoorbeeld de naam van het project nog nodig.
Omdat er meerdere groepsleiders zijn, wordt al die informatie meerdere keren verstuurd, wat natuurlijk niet nodig is. Daarom zou ik het graag zo hebben dat alle groepsleiders in één cel worden gepropt, waardoor maar één rij resultaten wordt teruggegeven.

[ Voor 46% gewijzigd door Repsaj_Nav op 16-01-2009 22:05 . Reden: Er was ondertussen nog een reactie geplaatst ]


Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
GJtje schreef op vrijdag 16 januari 2009 @ 21:59:
[...]
De TS bedoeld een query, die dus niet 2 rijen terug geeft bij loon X voor Pietje en Jantje.
Hij wil dat SQL zélf dit doet, zonder tussenkomst van PHP. Duidelijker kan hij het echt niet omschrijven.
Dat had ik wel begrepen. Ik vind het alleen raar om dit in SQL op te lossen. Je gaat dan aan de database vertellen hoe je de data wilt presenteren.

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 05-04 18:06

[ash]

Cookies :9

Als ik het zo lees heb je een GROUP BY nodig op salaris en moet je een GROUP_CONCAT gebruiken om zowel Piet als Jan samen te voegen.
Zie ook: http://dev.mysql.com/doc/...tml#function_group-concat

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

AlainS schreef op vrijdag 16 januari 2009 @ 22:11:
Dat had ik wel begrepen. Ik vind het alleen raar om dit in SQL op te lossen. Je gaat dan aan de database vertellen hoe je de data wilt presenteren.
Oke, dan zit ik er naast. :)
Repsaj_Nav schreef op vrijdag 16 januari 2009 @ 22:01:
Ik gebruik MySQL. De query is natuurlijk een stuk ingewikkelder dan ik hier geplaatst heb, ik begin met een gebruiker en dan wordt gekeken welke groepsleiders in dat project zitten (via allemaal referentie-tabellen). Dat is niet alle informatie die ik nodig heb, ik heb bijvoorbeeld de naam van het project nog nodig.
Omdat er meerdere groepsleiders zijn, wordt al die informatie meerdere keren verstuurd, wat natuurlijk niet nodig is. Daarom zou ik het graag zo hebben dat alle groepsleiders in één cel worden gepropt, waardoor maar één rij resultaten wordt teruggegeven.
Heb je je DB wel goed genormaliseerd dan? Iets wekt bij mij nu de indruk, dat dat niet helemaal het geval is, of ik zit er naast natuurlijk.

Acties:
  • 0 Henk 'm!

  • Repsaj_Nav
  • Registratie: Juni 2006
  • Laatst online: 15-09 14:54

Repsaj_Nav

Hallo, ik ben Jasper

Topicstarter
[ash] schreef op vrijdag 16 januari 2009 @ 22:14:
Als ik het zo lees heb je een GROUP BY nodig op salaris en moet je een GROUP_CONCAT gebruiken om zowel Piet als Jan samen te voegen.
Zie ook: http://dev.mysql.com/doc/...tml#function_group-concat
Inderdaad, dit werkt :)
Hartstikke bedankt!

@GJtje: ik heb steeds gebruik gemaakt van voorbeelden, ik denk dat mijn echte database wel goed in elkaar steekt ;)

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
[ash] schreef op vrijdag 16 januari 2009 @ 22:14:
Als ik het zo lees heb je een GROUP BY nodig op salaris en moet je een GROUP_CONCAT gebruiken om zowel Piet als Jan samen te voegen.
Zie ook: http://dev.mysql.com/doc/...tml#function_group-concat
In Firebird (vanaf 2.1) heb je de vergelijkbaar methode LIST. Ik geloof dat Oracle 10g een vergelijkbare methode heeft (of dat je daar iig redelijk makkelijk zelf een dergelijke UDF kan schrijven)
AlainS schreef op vrijdag 16 januari 2009 @ 21:49:
Waarom is het smerig om dat met php op te lossen?

Met je SQL-query haal je de informatie op en met php interpreteer je het. Wat is daar raar aan?
Aan de andere kant kan je ook stellen dat als je de informatie al op de gewenste manier uit je database kan trekken, waarom zou je dat dan niet doen en extra moeite steken in verwerken in je applicatie zelf.

[ Voor 30% gewijzigd door Remus op 17-01-2009 16:31 ]


Acties:
  • 0 Henk 'm!

  • killingdjef
  • Registratie: Januari 2004
  • Laatst online: 18-09 17:59
AlainS schreef op vrijdag 16 januari 2009 @ 21:49:
Waarom is het smerig om dat met php op te lossen?

Met je SQL-query haal je de informatie op en met php interpreteer je het. Wat is daar raar aan?
AlainS schreef op vrijdag 16 januari 2009 @ 22:11:
[...]
Dat had ik wel begrepen. Ik vind het alleen raar om dit in SQL op te lossen. Je gaat dan aan de database vertellen hoe je de data wilt presenteren.
Het is smerig om dit in een programmeertaal op te lossen omdat je jezelf hiermee afhankelijk maakt van de taal. Mocht er op een gegeven moment de wens bestaan om een app te schrijven in een andere taal en je wil dezelfde data presenteren dan moet je in die taal hetzelfde trucje toepassen.

Ik vind het persoonlijk meer raar om juist niet een database te vertellen hoe je je data getoont wil hebben. De essentie van een query is dat je een vraag stelt en een bepaald antwoord verwacht. Niet een allesomvattend antwoord waaruit je zelf de belangrijke stukjes moet filteren.

Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
killingdjef schreef op donderdag 22 januari 2009 @ 02:23:
[...]


[...]


Het is smerig om dit in een programmeertaal op te lossen omdat je jezelf hiermee afhankelijk maakt van de taal. Mocht er op een gegeven moment de wens bestaan om een app te schrijven in een andere taal en je wil dezelfde data presenteren dan moet je in die taal hetzelfde trucje toepassen.

Ik vind het persoonlijk meer raar om juist niet een database te vertellen hoe je je data getoont wil hebben. De essentie van een query is dat je een vraag stelt en een bepaald antwoord verwacht. Niet een allesomvattend antwoord waaruit je zelf de belangrijke stukjes moet filteren.
Correctie: Jij vindt het smerig.
Ik vind juist dat je zoiets niet in de database moet doen. Een paar velden combineren is geen 'trucje', het is gewoon een opmaaktool.
Opmaak hoort niet in de database vind ik. Ik neem aan dat je ook niet alvast <span style='color:red'> toevoegt aan een waarde als je deze in rood wilt weergeven.
Ook limiteer je jezelf. Wat als je volgende week de namen als een link wilt weergeven. Dan werkt deze aanpak niet meer en moet je alsnog je query gaan ombouwen. (en reken maar dat je de weergave van gegevens vaker aanpast dan je programmeertaal)

[ Voor 3% gewijzigd door Pete op 22-01-2009 07:54 ]

petersmit.eu


Acties:
  • 0 Henk 'm!

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 23-09 22:37
[ash] schreef op vrijdag 16 januari 2009 @ 22:14:
Als ik het zo lees heb je een GROUP BY nodig op salaris en moet je een GROUP_CONCAT gebruiken om zowel Piet als Jan samen te voegen.
Zie ook: http://dev.mysql.com/doc/...tml#function_group-concat
Voor mensen die ditzelfde willen doen in MSSQL; de STUFF() functie is hiervoor een uitkomst.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:22
-> PRG

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-09 23:37

Janoz

Moderator Devschuur®

!litemod

killingdjef schreef op donderdag 22 januari 2009 @ 02:23:
Ik vind het persoonlijk meer raar om juist niet een database te vertellen hoe je je data getoont wil hebben. De essentie van een query is dat je een vraag stelt en een bepaald antwoord verwacht. Niet een allesomvattend antwoord waaruit je zelf de belangrijke stukjes moet filteren.
Nee, je stelt aan je database een vraag en je krijgt de gevraagde informatie terug. In je applicatie bepaal je vervolgens hoe je dit representeert. Filteren laat je inderdaad door de database doen, maar dat doe je door je where aan te passen. Het concateneren van een kolom is echter geen filteren, maar een verandering van representatie.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
killingdjef schreef op donderdag 22 januari 2009 @ 02:23:
Het is smerig om dit in een programmeertaal op te lossen omdat je jezelf hiermee afhankelijk maakt van de taal. Mocht er op een gegeven moment de wens bestaan om een app te schrijven in een andere taal en je wil dezelfde data presenteren dan moet je in die taal hetzelfde trucje toepassen.
Stel dat ik een applicatie schrijf in Java, dan moet ik waarschijnlijk een JMenuBar maken. Daarnaast moet ik mijn data presenteren aan de gebruiker, in de GUI die ik in java heb gemaakt.

Nu ga ik over naar PHP. Kan ik nu mijn java code aanroepen?
Ik vind het persoonlijk meer raar om juist niet een database te vertellen hoe je je data getoont wil hebben. De essentie van een query is dat je een vraag stelt en een bepaald antwoord verwacht. Niet een allesomvattend antwoord waaruit je zelf de belangrijke stukjes moet filteren.
De essentie van een query is dat je de informatie krijgt die je aan de database vraagt. Als er informatie tussen staat waar je niet om gevraagd hebt is je query hoogstwaarschijnlijk verkeerd (of je hebt besloten om het in een andere laag op te lossen). Een database is een grote bak aan informatie. Een DMS is een luikje waar je informatie op kunt vragen. Wat je er mee doet is jouw probleem. ;)

You don't have to be crazy to do this job, but it helps ....

Pagina: 1