WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Återkommande klurigt SQL-queryproblem (https://www.wn.se/forum/showthread.php?t=22251)

martine 2007-07-13 00:00

Jag har ett återkommande problem särskilt när jag joinar ihop tabeller. Hoppas nu att någon klok man eller kvinna här har en lösning… (Jag har säkert bara missat någon uppenbar lösning).

Exempelvis:
Jag har en tabell med bilmodeller, t ex Volvo, Saab, etc. Varje bil har ett antal egenskaper t ex baklucka, taklucka, kombi. Om jag gör en tabell som t ex:

CREATE TABLE bilar (id INT, biltyp VARCHAR, delar SET('baklucka','taklucka','kombi'))

så kan jag lätt hämta att biltypen volvon har 'baklucka,taklucka'

Om jag däremot har en normaliserad (relationell) databas så får jag problemet att när jag joinar ihop biltyp och egenskaper så får jag raderna
volvo, taklucka
volvo, baklucka

Vad jag skulle vilja är något liknande:
SELECT bil, CONCAT(SELECT delar FROM egenskaper) FROM biltyper
som skulle ge mig volvo, taklucka;baklucka

Antingen så är jag inne på helt fel väg eller så finns det någon smidig lösning på problemet, dvs någon bra query som jag missat (jag kan förstås först söka bilmodellen i en query och sedan alla som hör till i en annan med då behöver jag ju göra 51 queries för att visa 50 bilar, vore bra om det gick att lösa smidigare).

Vad jag vill göra är alltså att ställa en query som ger mig en sträng med data från flera rader i en databastabell - det måste väl gå att göra (utan temporary tabeller etc)?

(ursäkta att jag har framställt exemplet så korkat men jag har försök göra det så enkelt som möjligt för att inte komplicera onödigt)

eg0master 2007-07-13 11:19

Kikat på funktionen GROUP_CONCAT i mysql?

fors 2007-07-13 11:24

Som sagt GROUP_CONCAT i MySQL. Om du kör nån annan databashanterare så får du nog göra det i något scriptspråk.

Kolla: http://www.sweclockers.com/forum/sho...postid=7475451

martine 2007-07-13 13:04

Citat:

Originally posted by eg0master@Jul 13 2007, 11:19
Kikat på funktionen GROUP_CONCAT i mysql?
Underbart, stort tack eg0master och fors. Precis vad jag letade efter. Andvänder nuförtiden nästan uteslutande MySQL ja. :) :) B)

Misstänkte som sagt det fanns någon funktion av det här slaget! Skönt, nu kan jag flytta över en hel del av logiken från skriptspråket till sql. Undrar varför det inte finns något liknande i andra databaser än MySQL?… <_<

Westman 2007-07-13 15:06

Citat:

Ursprungligen postat av martine
Citat:

Ursprungligen postat av eg0master
Kikat på funktionen GROUP_CONCAT i mysql?

Underbart, stort tack eg0master och fors. Precis vad jag letade efter. Andvänder nuförtiden nästan uteslutande MySQL ja. :) :) B)

Misstänkte som sagt det fanns någon funktion av det här slaget! Skönt, nu kan jag flytta över en hel del av logiken från skriptspråket till sql. Undrar varför det inte finns något liknande i andra databaser än MySQL?… <_<

Jag är absolut ingen SQLguru men visst finns väl liknande funktioner bl.a. i MSSQL.
Kod:

select a + ' ' + b as ab
:blink:

martine 2007-07-13 21:04

Citat:

Originally posted by Westman@Jul 13 2007, 15:06
Jag är absolut ingen SQLguru men visst finns väl liknande funktioner bl.a. i MSSQL.
Kod:

select a + ' ' + b as ab
:blink:

Du tänker nog på MSSQL:s motsvarighet till CONCAT(), samma sak med MySQL:
Kod:

SELECT CONCAT(a,' ',b) AS ab
GROUP_CONCAT() är en aggregatefunktion (kanske någon har ett bättre svenskt namn?) precis som SUM() etc och används med GROUP BY. Fantastiskt fungerar det i alla fall.

(Det går säkert att åstadkomma något liknande med rekursiva loopar od i Oracle men där har jag inte stor aning, har aldrig kört Oracle…)


Alla tider är GMT +2. Klockan är nu 15:21.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson