/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Umulig forespørgsel eller?
Fra : Johan Holst Nielsen


Dato : 21-09-03 19:40

Hej,

Okay - nu er det således at et system skal opdateres - og nu har jeg
fået til opgave at opdatere måden som listen vises på. Jeg kan dog ikke
gennemskue hvilken query jeg skal bruge - for at det virker - hvis det
overhovedet kan lade sig gøre :(

Der er tale om en MySQL 3.23

Databasen er som følger...

Main tabel...

Id int(11) ...
En masse andre felter som er underordnet...

Main tabellen har en anden taabel hvor der ligger statusbeskeder...

Id int(11)
lid int(11) (linker til Id i main tabel)
statusid int(4)
resource varchar(100)
statusdate datetime

Okay her er problemet så...

Jeg vil gerne have en liste over alle tingene i main tabellen...
Samtidig vil jeg gerne trække dataene ud fra status tabellen - som
tilknytter sig til main tabellen...

lad os tage følgende eksempel...

Main tabellen har følgende:
id = 344
En masse ligegyldige felter..

statustabellen har følgende poster som tilknytter sig...

statusid = 55
statusdate = 2003-04-03 00:00:00

statusid = 55
statusdate = 2003-08-03 00:00:00

statusid = 78
statusdate = 2003-08-31 00:00:00

statusid = 77
statusdate = 2003-07-25 00:00:00

Nu vil jeg reelt gerne have ALLE dataene ud...

Således jeg reelt selecter alle sammen... således jeg reelt får flere
statusdates i et row

Problemet er at jeg ikke kan gøre det i en query? Afaik Eller kan jeg?
Eventult hvis jeg opdaterer til MySQL 4.0 ?

mvh
Johan


 
 
Peter Brodersen (21-09-2003)
Kommentar
Fra : Peter Brodersen


Dato : 21-09-03 19:51

On Sun, 21 Sep 2003 20:39:58 +0200, Johan Holst Nielsen
<johan@weknowthewayout.com> wrote:

>Således jeg reelt selecter alle sammen... således jeg reelt får flere
>statusdates i et row
>
>Problemet er at jeg ikke kan gøre det i en query? Afaik Eller kan jeg?
>Eventult hvis jeg opdaterer til MySQL 4.0 ?

MySQL 4.1 (der er i alpha), har en ret cool GROUP_CONCAT, hvor du ved
en GROUP BY kan få de sammenslåede felter returneret vertikalt. Jeg
synes, det lyder som om, det er det, du er interesseret i. Ellers må
du give et helt præcist eksempel på hvordan, dit resultat skal se ud.

Jeg har skrevet lidt løst om det på http://stock.ter.dk/mysql410.txt :

==
Først en liste over folk i forskellige afdelinger. Det kan vi normalt
let JOIN'e på, fx:

mysql> SELECT employee.department_id, employee.name FROM employee
ORDER BY department_id;
+---------------+-------------------+
| department_id | name |
+---------------+-------------------+
| 1 | Peter Johnson |
| 2 | John Smith |
| 2 | Jack Smith |
| 2 | Michael Friday |
| 3 | Bartholomew White |
| 3 | Lisa Craft |
+---------------+-------------------+
6 rows in set (0.01 sec)

Nu ville det være rart med én række pr. afdeling, og så bare en liste
over folk i afdelingen:

mysql> SELECT department_id, GROUP_CONCAT(name SEPARATOR ', ') FROM
employee
GROUP BY department_id;
+---------------+--------------------------------------------+
| department_id | GROUP_CONCAT(employee.name SEPARATOR ', ') |
+---------------+--------------------------------------------+
| 1 | Peter Johnson |
| 2 | John Smith, Jack Smith, Michael Friday |
| 3 | Bartholomew White, Lisa Craft |
+---------------+--------------------------------------------+
==

--
- Peter Brodersen

Ugens sprogtip: terabyte (og ikke terrabyte)

Johan Holst Nielsen (21-09-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 21-09-03 21:01

Peter Brodersen wrote:
> On Sun, 21 Sep 2003 20:39:58 +0200, Johan Holst Nielsen
> <johan@weknowthewayout.com> wrote:
>
>
>>Således jeg reelt selecter alle sammen... således jeg reelt får flere
>>statusdates i et row
>>
>>Problemet er at jeg ikke kan gøre det i en query? Afaik Eller kan jeg?
>>Eventult hvis jeg opdaterer til MySQL 4.0 ?
>
>
> MySQL 4.1 (der er i alpha), har en ret cool GROUP_CONCAT, hvor du ved
> en GROUP BY kan få de sammenslåede felter returneret vertikalt. Jeg
> synes, det lyder som om, det er det, du er interesseret i. Ellers må
> du give et helt præcist eksempel på hvordan, dit resultat skal se ud.
>
> Jeg har skrevet lidt løst om det på http://stock.ter.dk/mysql410.txt :

Det kan bruges - jeg vil dog ikke køre Alpha releases på et
produktionssystem :(

Så jeg må bare fyre en del ekstra queries af indtil da :)

Men tak for hjælpen begge to :)

mvh
Johan


JMo. (21-09-2003)
Kommentar
Fra : JMo.


Dato : 21-09-03 19:57

Johan Holst Nielsen <johan@weknowthewayout.com> wrote in news:bkkr9v$4pf$1
@sunsite.dk:

> Således jeg reelt selecter alle sammen... således jeg reelt får flere
> statusdates i et row

I hvert sit felt, eller i et samlet felt?

Mht. til sidstnævnte kunne det måske være noget i retning af GROUP_CONCAT

http://www.mysql.com/doc/en/GROUP-BY-Functions.html

> Problemet er at jeg ikke kan gøre det i en query? Afaik Eller kan jeg?
> Eventult hvis jeg opdaterer til MySQL 4.0 ?

Du skal have fat i 4.1, der dog stadig er alpha

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste