Suspect Skrevet 5. januar 2012 Del Skrevet 5. januar 2012 (endret) Hei, Jeg holder på å lage et system hvor feil, service ol. informasjon kan registreres og hentes ut. Det problemet jeg har nå er at dersom en bruker søker på en "robot" skal all informasjon om denne roboten dukke opp og sorteres på dato. Tabellen robot_error er enkel og det er denne koden tar utgangspunkt i. Problemet er når jeg skal hente servicer. I tabellen service er det bare generell informasjon, dato, kommentar osv - mens tabellen service_robot_errorservice inneholder den spesifike informasjonen som feks hvilken robot, status på robot osv. Hvordan kan jeg strukturere koden for å hente ut all denne informasjonen og sortere på dato? Jeg er rimelig sikker på at måten jeg har gjort det er lite effektiv, så tar gjerne i mot tips! Her er koden: http://pastebin.com/VXUNYANe Takk for alle innspill! PS: Skal nevnes at tabellen service_robot_errorservice har en fremednøkkel som kobler den til tabellen service Endret 5. januar 2012 av Suspect Lenke til kommentar
Ekko Skrevet 10. januar 2012 Del Skrevet 10. januar 2012 Ser denne er litt gammel, men kan svare likevel: Det du lurer på er hva du skal skrive under //Get information from other tables og videre derfra? Det høres ut for meg som du bør bruke noen JOIN i forespørslene dine, kjenner du til bruk av JOIN? Hvis du trenger mer hjelp er det en fordel om du skriver opp tabelldefinisjonene for oss slik at det er lettere å forklare hvordan ting kobles sammen (både for deg og oss) Lenke til kommentar
spikre Skrevet 10. januar 2012 Del Skrevet 10. januar 2012 Dette bør sorteres i samme tabellen. Det er vell ingen spesiell grunn for å legge dette til 2 ulike tabeller? Ellers er den en enkel jobb og hente data fra 2 tabeller, og sette begge inn i while. Lenke til kommentar
Suspect Skrevet 10. januar 2012 Forfatter Del Skrevet 10. januar 2012 Hei, Alt kan ikke samles i en tabell pga det er snakk om mange service tabeller siden det finnes mange forskjellige servicer, jeg ramset kun opp den ene for å få forklart hva jeg vil. Under ser dere hvordan tabellene er bygget opp. Tabellen robot_error er utenforstående, mens service_robot_errorservice inneholder en fremmednøkkel som er PK i tabellen service. Når en bruker søker på feks robot 54 vil jeg at all historikk fra robot_error og de forskjellige service tabellene dukker opp sortert på dato. Jeg har litt erfaring med JOIN men skulle nok kanskje hatt litt starthjelp TABLE: robot_error ---------------------------------------------------------------------------------------------------------------------- | id | date | stop_time | start_time | robot | position | error_code | observation | solution | downtime | logged_by | ---------------------------------------------------------------------------------------------------------------------- | 1 | 02.01.2012 | 14:51:31 | 14:52:00 | 20 | 25/7 | 214 | Feilet i X retning | Ta av rob, start | 29 | XXX | | 2 | 02.01.2012 | 14:59:00 | 15:00:00 | 54 | 58/17 | 168 | Portfeil | EACK, start | 60 | XXX | ---------------------------------------------------------------------------------------------------------------------- TABLE: service ---------------------------------------------------------------------------------------------- | service_id | service_date | service_module | service_user | service_comment | service_type | ---------------------------------------------------------------------------------------------- | 1 | 13.01.2012 | Robot | XXX | Test service | Errorservice | | 2 | 04.01.2012 | Robot | XXX | Test basic | Basicservice | ---------------------------------------------------------------------------------------------- TABLE: service_robot_errorservice ------------------------------------------------------------------------------------------------------- | errorservice_id | service_id | errorservice_robot | errorservice_tracksensor | errorservice_gripper | ------------------------------------------------------------------------------------------------------- | 5 | 1 | 54 | OK | OK | ------------------------------------------------------------------------------------------------------- Lenke til kommentar
Crowly Skrevet 11. januar 2012 Del Skrevet 11. januar 2012 (endret) Jeg har litt erfaring med JOIN men skulle nok kanskje hatt litt starthjelp Kanskje noe slikt, har bare tatt med noen felt SELECT re.dato, re.stop_time, re.robot, s.service_comment, s.service_type, sre.errorservice_tracksensor FROM robot_error re INNER JOIN service_robot_errorservice sre ON sre.errorservice_robot=re.robot INNER JOIN service s ON s.service_id=sre.service_id WHERE re.robot=54 ORDER BY re.dato -- Litt generelt om joins: Enkleste formen for join er vel INNER JOIN, hvor bare forekomster som finnes i begge tabellene blir med, f.eks SELECT t1.felt1 AS f1, t1.felt2 AS f2, t2.felt1 AS f3, t2.felt2 AS f4 FROM tabell1 AS t1 INNER JOIN tabell2 AS t2 ON t1.id=t2.f_id (AS nøkkelordet er ikke nødvendig for aliaser, men gjør det kanskje mer lesbart). Her kobles tabell1 og tabell2 med kriteriet oppgitt etter ON, du kan oppgi flere kriterier f.eks med en id og dato: INNER JOIN tabell2 AS t2 ON t1.f_id=t2.id AND t1.dato=t2.dato Du kan koble flere enn to tabeller, er bare å legge til flere joins SELECT t1.felt1 AS f1, t2.felt1 AS f2, t3.felt1 AS f3, t4.felt1 AS f4 FROM tabell1 AS t1 INNER JOIN tabell2 AS t2 ON t1.f_id=t2.id AND t1.dato=t2.dato INNER JOIN tabell3 AS t3 ON t1.s_id=t3.id LEFT OUTER JOIN tabell4 AS t4 ON t4.feltx=t2.felty En annen praktisk join er (LEFT) OUTER JOIN, spørringen vil returnere rader, selv om tabellen koblet til med LEFT OUTER JOIN ikke har noen "treff". F.eks ett system for avis, hvor opplag er lagret i en tabell og sidetall i en annen SELECT o.dato, o.tittel, o.antall, s.sider FROM opplag o INNER JOIN sider s ON o.dato=s.dato AND o.avis_id=s.avis_id WHERE o.dato=TO_DATE('12.01.2012','DD.MM.YYYY') AND o.tittel='xxxx' (Litt oracle syntaks på dato). SELECT o.dato, o.tittel, o.antall, s.sider FROM opplag o LEFT OUTER JOIN sider s ON o.dato=s.dato AND o.avis_id=s.avis_id WHERE o.dato=TO_DATE('12.01.2012','DD.MM.YYYY') AND o.tittel='xxxx' Hvis f.eks. bare opplag eksisterer, men ikke sidetall for en gitt tittel og dato, så vil den første ikke gi noen treff, mens den andre hente frem en rad, hvor sider er NULL. http://www.w3schools.com/sql/sql_join.asp http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx (har også noen bilder som illustrerer utvalget ganske greit) http://www.halfgaar.net/sql-joins-are-easy (også med bilder) Denne boka har jeg lært mye av, Learning SQL, 2nd Edition (fra O'Reilly Media), bruker mysql som eksempel base, men tar for seg både oracle og ms sql i tillegg der de er forskjellig. Kan bestilles fra ymse bokhandlere i inn og utland Endret 12. januar 2012 av Crowly 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å