Kom ihåg mig?

Återkommande klurigt SQL-queryproblem

Ämnesverktyg Visningsalternativ
Oläst 2007-07-13, 00:00 #1
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
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)
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-13, 11:19 #2
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Kikat på funktionen GROUP_CONCAT i mysql?
eg0master är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-13, 11:24 #3
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
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
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-13, 13:04 #4
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
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?… <_<
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-13, 15:06 #5
Westmans avatar
Westman Westman är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jun 2004
Inlägg: 4 021
Westman Westman är inte uppkopplad
Klarade millennium-buggen
Westmans avatar
 
Reg.datum: Jun 2004
Inlägg: 4 021
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:
Westman är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-07-13, 21:04 #6
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
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…)
martine är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:40.

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