Gå til innhold

[Løst] SQL: Vise info fra én tabell og telle antall ganger ID dukker opp i en annen tabell.


Anbefalte innlegg

Hei!

 

Lurer på hvordan jeg kan kombinere dette i en spørring.

 

Først hva jeg har:

Tabell vaktinfo: vaktid, navn, telefonnumre etc

Tabell vaktjobb: id, vaktid, dato

 

Og hva jeg vil:

Jeg vil vise alle kolonner fra vaktinfo og i tillegg ha en kolonne der jeg teller hvor mange ganger hver enkelt vaktid dukker opp i tabellen vaktjobb.

 

Klarer dette i egen spørring (SELECT count(id) FROM vaktjobb WHERE vaktid = 1) men da må jeg sende en spørring pr rad på vaktinfo.. Vet det skal gå an å gjøre dette på en mer effektiv måte men jeg har lett meg blå :S

Lenke til kommentar
Videoannonse
Annonse

Hmms... Lurer på om jeg skal ta det et steg videre..

tabell vaktinfo: vaktid, navn, telefon etc.

tabell arrangement: arrid, dato, type/navn etc.

tabell vaktjobb: id, vaktid, arrid.

 

Foreløpig har jeg følgende spørring som viser info samt finner ut antall ganger vedkommende forekommer i vaktjobb:

SELECT
vaktinfo.*,
COUNT(vaktjobb.vaktid) AS antallvakter,
DATE_FORMAT(startet,"%e/%c %Y") AS startet2k,
DATE_FORMAT(sistinnlogget,"%e/%c %Y") AS sistinnlogget2k
FROM vaktinfo
LEFT JOIN vaktjobb ON vaktinfo.vaktid = vaktjobb.vaktid
WHERE (suspended = 0)
GROUP BY vaktinfo.vaktid 
ORDER BY styreflag DESC, navn ASC

 

antallvakter er antall forekomster i vaktjobb for hver enkel ansatt/vakt.. Denne kolonnen kunne jeg tenke meg å dele i to igjen: en hvor datediff(curdate(),arrangement.dato) er positiv og en der den er negativ slik at jeg kan se antall vakter de har jobbet og antall vakter de er satt opp på å jobbe.

 

Har klart å feste på arrangementstabellen slik at jeg kun filtrerte (WHERE) vaktene utfra dette kriteriet men sliter litt med å forstå hvordan jeg skal få det inn i en count-funksjon.

Endret av Melkekartong
Lenke til kommentar
  • 3 uker senere...

Til ettertanke blir det kanskje lettere å spørre en eller to ganger pr vaktinfo-rad fremfor å lage én helvetes innvikla spørring...

Det kan jo godt være at det funker bedre ja. ;)

 

Vet ikke hvilken database du bruker, men i f.eks Postgres så får du ikke noe ytelsestap å snakke om hvis du skriver spørringer på denne formen:

 

SELECT * FROM

( SELECT .... ) as FOO

LEFT JOIN (SELECT ...) AS BAR on FOO.id = BAR.id

 

Ganske nyttig hvis du jobber med aggregates og skal aggregere på flere verdier i samme spørring.

 

Det er også mulig å bruke CASE hvis du vil unngå å gå igjennom samme tabell flere ganger:

 

SELECT SUM(CASE WHEN xxx THEN 1 ELSE 0 END) as working,

SUM(CASE WHEN yyy THEN 1 ELSE 0 END) as should_work

FROM ...

WHERE ...

GROUP BY ...

Endret av blackbrrd
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...