Melkekartong Skrevet 27. mars 2011 Del Skrevet 27. mars 2011 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
TSP Skrevet 27. mars 2011 Del Skrevet 27. mars 2011 Her kan du bruke GROUP BY. Litt usikker på om dette blir rett, men du kan prøve: SELECT vi.*, COUNT(vj.vaktid) FROM vaktjobb vj, vaktinfo vi WHERE vj.vaktid = vi.vaktid GROUP BY vj.vaktid Lenke til kommentar
Melkekartong Skrevet 27. mars 2011 Forfatter Del Skrevet 27. mars 2011 Hmms.. Syntaksfeil :/ Vil alle radene fra vaktinfo dukke opp selv om de ikke er nevnt i vaktjobb? Lenke til kommentar
Melkekartong Skrevet 27. mars 2011 Forfatter Del Skrevet 27. mars 2011 Erm, correction - ikke syntaksfeil men jeg fikk tilbake et tomt sett. Lenke til kommentar
Melkekartong Skrevet 27. mars 2011 Forfatter Del Skrevet 27. mars 2011 Jihu! Der fant jeg ut av det SELECT vaktinfo.*, COUNT(vaktjobb.vaktid) FROM vaktinfo LEFT JOIN vaktjobb ON vaktinfo.vaktid = vaktjobb.vaktid GROUP BY vaktinfo.vaktid; Takk for hjelpen Lenke til kommentar
TSP Skrevet 27. mars 2011 Del Skrevet 27. mars 2011 Ja, joins må brukes da ja. Jeg har sjelden brukt aggregat-funksjoner når jeg har hentet informasjon fra flere tabeller, er en lite god ide på forumdatabasen vår... Lenke til kommentar
Melkekartong Skrevet 27. mars 2011 Forfatter Del Skrevet 27. mars 2011 (endret) 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 27. mars 2011 av Melkekartong Lenke til kommentar
Melkekartong Skrevet 27. mars 2011 Forfatter Del Skrevet 27. mars 2011 Til ettertanke blir det kanskje lettere å spørre en eller to ganger pr vaktinfo-rad fremfor å lage én helvetes innvikla spørring... Lenke til kommentar
blackbrrd Skrevet 17. april 2011 Del Skrevet 17. april 2011 (endret) 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 17. april 2011 av blackbrrd Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå