Avatar billede mccookie Seniormester
09. december 2003 - 20:03 Der er 23 kommentarer og
1 løsning

2 Querys i et script

Hejsa

Jeg har en forespørgelse i mit script som ser sådan ud..... Den virker fint og som tiltænkt.

Se under mærket **

$resultat = mysql_query("SELECT * FROM
                ab_adresse,
                ab_fodselsdag,
                ab_funktion,
                ab_funktionsliste,
                ab_indmeldt,
                ab_person,
                enheder
                WHERE
                  ab_funktion.ab_funktionsliste_id = 1
                  AND
                  ab_funktion.enhed_id = $enhed_nr
                  AND
                  ab_funktion.aktiv = 1
                  AND ab_adresse.ab_person_id = ab_person.ab_person_id
                  AND ab_funktion.ab_person_id = ab_person.ab_person_id
                  AND ab_indmeldt.ab_person_id = ab_person.ab_person_id
                  AND ab_person.ab_person_id = ab_person.ab_person_id
                  AND ab_fodselsdag.ab_person_id = ab_person.ab_person_id
                  AND ab_funktion.ab_funktionsliste_id = ab_funktionsliste.ab_funktionsliste_id
                  AND enheder.enhed_id = ab_funktion.enhed_id ORDER BY fornavn");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);
   
  if ($kon == 1) {   
  echo "<tr>";
  echo "<td><img width=60 src=\"dreng.gif\" alt=\"$fornavn $efternavn\"></td>
        <td><table border=0 width=100%>"; } else {
  echo "<tr>";
  echo "<td><img width=60 src=\"pige.gif\" alt=\"$fornavn $efternavn\"></td>
        <td><table border=0 width=100%>"; }
       

  echo "<tr>";
  echo " <td width=25%>Enhed:</td>";
  echo " <td width=75%>$enhed_navn</td>";
  echo "</tr>";

  echo "<tr>";
  echo " <td>Funktion:</td>";
  echo " <td>$funktion**</td>"; }
  echo "</tr>";

** Her ville jeg gerne slå op en datbase og bruge ab_person_id som er primær nøgle på personerne........
Men hvordan skal jeg lige så'n gøre det?
 
  echo "<tr>";
  echo " <td>Navn:</td>";
  echo " <td>$fornavn $efternavn</td>";
  echo "</tr>";
 
  echo "<tr>";
  echo " <td>Email:</td>";
  echo " <td>$email</td>";
  echo "</tr>";
 
  echo "<tr>";
  echo " <td>Tlf:</td>";
  echo " <td>$tlf</td>";
  echo "</tr>";
  echo "</table></td></tr>";

 
}
Avatar billede mccookie Seniormester
09. december 2003 - 20:07 #1
Endnu et problem......

I følgende tabeller:
ab_adresse,
                ab_fodselsdag,
                ab_funktion,
                ab_indmeldt,
                ab_person

Har jeg et felt der hedder ab_person_id som binder alle tabellerne sammen....... men når jeg kører min query, så smider den i resultatet 2 ab_person_id felter ud.... den ene er rigtig og har forskellige værdier... men nr. 2 indeholder allesammen bare et 1 tal... det virker lidt forkert... hvad kan være galt?
Avatar billede jakoba Nybegynder
09. december 2003 - 20:17 #2
det du henter med  mysql_fetch_array( $resultatset )  er et associativt array
så hvis der er 2 felter med samme navn vil deres værdier blive lagt i samme celler. For at skelne imellem dem må du give dem forskellige navne:

    select ab_adresse.ab_person_id AS addr_ab_person_id,
          ab_funktion.ab_person_id AS func_ab_person_id,
          ...

så kan du hente de to felter med hhv $row"addr_ab_person_id"] og $row["func_ab_person_id"].
det bliver et hulens skriveri. men jeg gætter på at du alligevel kun bruger en brøkdel af de felter der hentes, så alt ialt kan det nemt blive hurtigere fordi der ikke skal flyttes så mange data fra SQL serveren til php.
Avatar billede mccookie Seniormester
09. december 2003 - 20:23 #3
Jeg skal lige ud at køre, så prøver jeg at kigge på det bagefter :o)
Avatar billede mccookie Seniormester
09. december 2003 - 22:16 #4
Hejsa

Nu har jeg lavet det så'n her...... det virker i phpmyadmin....

$resultat = mysql_query("SELECT * FROM
                SELECT enheder.enhed_navn,
                      ab_funktion.enhed_id,
                      ab_funktion.ab_funktion_id,
                      ab_person.ab_person_id AS person_id,
                      ab_person.ab_person_id, ab_person.fornavn,
                      ab_person.efternavn, ab_adresse.email,
                      ab_adresse.tlf, ab_adresse.mobil
                FROM enheder,
                    ab_person,
                    ab_adresse,
                    ab_funktion
                WHERE ab_person.ab_person_id = ab_adresse.ab_person_id
                AND  ab_person.ab_person_id = ab_funktion.ab_person_id
                AND  ab_funktion.aktiv = 1
                AND  ab_adresse.aktiv = 1
                AND  ab_funktion.enhed_id = enheder.enhed_id
                AND ab_funktion.enhed_id = $enhed");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);

og følgende siger min browser....

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /usr/local/psa/home/vhosts/httpdocs/lib/mainsite/vis_grupperaadets_medlemmer.php on line 291

Hvorfor gør den nu det??
Avatar billede mccookie Seniormester
09. december 2003 - 22:48 #5
Jeg tænker nu egentligt på om jeg i virkeligheden skulle lære noget om joins ??

mvh.
Henning
Avatar billede jakoba Nybegynder
09. december 2003 - 23:04 #6
den melding betyder at din  mysql_query  ikke kunne køre fordi der gik noget galt.

Det kan fx være:  syntaks-fejl, fejlstavet feltnavn, fejlstaver tabelnavn

Jeg kan ikke lige se noget galt.

en god tommelfinger reget er ALTID at hægte en or die( mysql_error() )  efter kald til mysql_query. så får du fejlmeldingen fra mysql hvis der går noget galt.

$resultat = mysql_query("SELECT * FROM
                SELECT enheder.enhed_navn,
                      ab_funktion.enhed_id,
                      ab_funktion.ab_funktion_id,
                      ab_person.ab_person_id AS person_id,
                      ab_person.ab_person_id, ab_person.fornavn,
                      ab_person.efternavn, ab_adresse.email,
                      ab_adresse.tlf, ab_adresse.mobil
                FROM enheder,
                    ab_person,
                    ab_adresse,
                    ab_funktion
                WHERE ab_person.ab_person_id = ab_adresse.ab_person_id
                AND  ab_person.ab_person_id = ab_funktion.ab_person_id
                AND  ab_funktion.aktiv = 1
                AND  ab_adresse.aktiv = 1
                AND  ab_funktion.enhed_id = enheder.enhed_id
                AND ab_funktion.enhed_id = $enhed")
    or die( mysql_error() );
Avatar billede mccookie Seniormester
09. december 2003 - 23:09 #7
Den siger.........men ka ikke lige lurer fejlen..

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT enheder.enhed_navn, ab_funktion.en
Avatar billede jakoba Nybegynder
09. december 2003 - 23:09 #8
Jo for pokker. du skriver  SELECT to gange

$resultat = mysql_query("                      // fjernet gammel SELECT
                SELECT enheder.enhed_navn,
                      ab_funktion.enhed_id,
                      ab_funktion.ab_funktion_id,
                      ab_person.ab_person_id AS person_id,
                      ab_person.ab_person_id, ab_person.fornavn,
                      ab_person.efternavn, ab_adresse.email,
                      ab_adresse.tlf, ab_adresse.mobil
                FROM enheder,
                    ab_person,
                    ab_adresse,
                    ab_funktion
                WHERE ab_person.ab_person_id = ab_adresse.ab_person_id
                AND  ab_person.ab_person_id = ab_funktion.ab_person_id
                AND  ab_funktion.aktiv = 1
                AND  ab_adresse.aktiv = 1
                AND  ab_funktion.enhed_id = enheder.enhed_id
                AND ab_funktion.enhed_id = $enhed")
    or die( mysql_error() );
Avatar billede mccookie Seniormester
09. december 2003 - 23:12 #9
Det første i denne verden man bliver blind på er øjnene....
SELECT * FROM
                SELECT enheder.enhed_navn

2*SELECT...... duer ikke helt
Avatar billede mccookie Seniormester
09. december 2003 - 23:16 #10
Den f..... igen med:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'enheder.enhed_navn, ab_funktion.enhed_id,

Prøver lige at kører den solo på SQL serveren
Avatar billede mccookie Seniormester
09. december 2003 - 23:36 #11
SELECT enheder.enhed_navn, ab_funktion.enhed_id, ab_funktion.ab_funktion_id, ab_person.ab_person_id AS person_id, ab_person.fornavn, ab_person.efternavn, ab_adresse.email, ab_adresse.tlf, ab_adresse.mobil
FROM enheder, ab_person, ab_adresse, ab_funktion
WHERE ab_person.ab_person_id = ab_funktion.ab_person_id AND ab_person.ab_person_id = ab_adresse.ab_person_id AND ab_funktion.aktiv = 1 AND ab_adresse.aktiv = 1 AND ab_funktion.enhed_id = enheder.enhed_id AND ab_funktion.enhed_id = $enhed_nr

Nu er der vist hul igennem :o)

Kan man så lave en forespørgelse imens man udskriver de andre resultater....
Avatar billede jakoba Nybegynder
09. december 2003 - 23:43 #12
Ja og nej.
et php script har kun een process, så enhver forespørgsel venter uden at gøre noget indtil data kommer retur.
men du kan sagtens lave næste forspørgsel før du skriver den sidste ud, sørg blot gor at gemme det næste resultatsæt in en anden variabel.

fandt du ud af hvad der var galt?
Avatar billede mccookie Seniormester
09. december 2003 - 23:46 #13
Nej ikke helt, prøver igen imorgen........... er for træt
Avatar billede jakoba Nybegynder
09. december 2003 - 23:54 #14
Jeg har et par gange oplevet at min ascii-editor (fx notepad) havde fået indsat et usynligt kontroltegn i koden, I det tilfælde hjælper det at skrive den kode ind igen.
Avatar billede mccookie Seniormester
10. december 2003 - 16:07 #15
Hey Jakoba........
Efter en god nats søvn hjælper det hele jo lidt på det :o)

Men.......... nu prøver vi igen.....

Jeg har følgende tabeller:
ab_adresse
ab_funktion
ab_funktionsliste
ab_fodselsdag
ab_person
enheder

I den udskrift jeg får, er der 11 personer, disse er medlem af en enhed, svarende til den jeg spørger til $enhed_id
Disse 11 personer har hver især en funktion, som er beskrevet i ab_funktionsliste............ men......
ab_funktion er den tabel der styrer hvilke personer der har hvilke funktioner og hvilken enhed de tilhører og beskrivelserne står beskrevet i ab_funktionsliste..........
Alle disse 11 personer har også en tilknytning til en funktion, men den er registreret under en anden enhed. Det være sig f.eks. gruppleder, gruppeass. enhedsleder mv.
Men hvordan får jeg dem flettet ind i udskriften??
Se evt.: http://www.strandboerne.dk/undersider/grupperaad/
Der mangler jo lige noget ved funktion.........
Kan du hjælpe eller andre
Avatar billede mccookie Seniormester
10. december 2003 - 16:21 #16
Hvad de der joins??
Avatar billede jakoba Nybegynder
10. december 2003 - 16:34 #17
Desværre, jeg kan ikke rigtig gennemskue det baglæns fra websiden.

jeg vil gætte på at det er i ab_person der bør være et felt med et funktion_2_id og et enhed_id til personer der har en lederrolle i en anden enhed.

men det er 99% gætteri. Ummiddelbart ville jeg nok lave en ny tabel ab_leder med felter til person_id, funktion_id, enhed_id, og evt andre lederegenskaber.

Kan du evt forklare lidt mere enkelt og udførligt så jeg kan fatte det?
Avatar billede mccookie Seniormester
10. december 2003 - 16:42 #18
AB_FUNKTION
ab_funktion_id 
ab_person_id
ab_funktionsliste_id
enhed_id
funktion_start
funktion_slut
oprettet
aktiv 

AB_FUNKTIONSLISTE
ab_funktionsliste_id
funktion
beskrivelse
oprettet 


Essens er lidt at man er medlem af grupperådet et år f.eks.
Det holder tabellen ab_funktion styr
Hvilken enhed man tilhører og hvilken lederfunktion man har.
Selve lederfunktionerne er listet i AB_FUNKTIONSLISTE.....
De der er medlem af grupperådet er medlem af enhed 9
Der er 7 enheder som har hver deres enhedsleder, disse 7 er er enhedsleder for hver deres enhed samtidigt med at de er medlem af grupperådet.

Jeg kan sagtens udskrive en liste over aktive grupperådsmedlemmer, men jeg ville gerne kunne skrive hvilken funktion den pågældende leder har!

Håber det hjalp lidt.....
Avatar billede jakoba Nybegynder
10. december 2003 - 17:05 #19
det du så mangler er et felt i AB_FUNKTIONSLISTE der hedder funktion_2_id og fortæller om den person i hans egenskab af leder (han/hun er jo egentlig to personer, med hvert sit job)

det har så også den fordel at han evt kan have endnu en lederfunktion

AB_FUNKTION.funktionsliste_id        AB_FUNKTION.person_id  // ham som medlem
              V
AB_FUNKTIONSLISTE.funktionsliste_id
  AB_FUNKTIONSLISTE.funktions_id
              V
  AB_FUNKTION.funktions_id
AB_FUNKTION.funktionsliste_id        AB_FUNKTION.person_id  // ham som leder
              V
AB_FUNKTIONSLISTE.funktionsliste_id
  AB_FUNKTIONSLISTE.funktions_id
              V
  AB_FUNKTION.funktions_id
AB_FUNKTION.funktionsliste_id        AB_FUNKTION.person_id  // ham som leder2

osv

men jeg kan ikke se en måde at gøre det uden at tilføje det felt i AB_FUNKTIONSLISTE
Avatar billede mccookie Seniormester
10. december 2003 - 17:55 #20
Den 1stre query jeg haver.......er der en smarter måde at lave den på... de der joins?
Avatar billede mccookie Seniormester
10. december 2003 - 18:00 #21
Men kan jeg gøre sådan her?

<?php

$resultat = mysql_query("SELECT ab_fodselsdag.kon,
                enheder.enhed_navn,
                ab_funktion.enhed_id,
                ab_funktion.ab_funktion_id,
                ab_person.ab_person_id AS person_id,
                ab_person.fornavn,
                ab_person.efternavn,
                ab_adresse.email,
                ab_adresse.tlf,
                ab_adresse.mobil
            FROM ab_fodselsdag,
                enheder,
                ab_person,
                ab_adresse,
                ab_funktion
            WHERE ab_person.ab_person_id = ab_fodselsdag.ab_person_id
              AND ab_person.ab_person_id = ab_funktion.ab_person_id
              AND ab_person.ab_person_id = ab_adresse.ab_person_id
              AND ab_funktion.aktiv = 1
              AND ab_adresse.aktiv = 1
              AND ab_funktion.enhed_id = enheder.enhed_id
              AND ab_funktion.enhed_id = $enhed_nr") or die( mysql_error() );

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);
   
  if ($kon == 1) {   
  echo "<tr>";
  echo "<td><img width=60 src=\"http://www.strandboerne.dk/ab_strandboerne/billeder/dreng.gif\" alt=\"$fornavn $efternavn\"></td>
        <td><table border=0 width=100%>"; } else {
  echo "<tr>";
  echo "<td><img width=60 src=\"http://www.strandboerne.dk/ab_strandboerne/billeder/pige.gif\" alt=\"$fornavn $efternavn\"></td>
        <td><table border=0 width=100%>"; }
       

  echo "<tr>";
  echo " <td width=25%>Enhed:</td>";
  echo " <td width=75%>$enhed_navn</td>";
  echo "</tr>";
Kan jeg så lave en ny forespørgelse her ???
  echo "<tr>";
  echo " <td>Funktion:</td>";
  echo " <td>$funktion</td>";
  echo "</tr>";
 
  echo "<tr>";
  echo " <td>Navn:</td>";
  echo " <td>$fornavn $efternavn</td>";
  echo "</tr>";
 
  echo "<tr>";
  echo " <td>Email:</td>";
  echo " <td>$email</td>";
  echo "</tr>";
 
  echo "<tr>";
  echo " <td>Tlf:</td>";
  echo " <td>$tlf</td>";
  echo "</tr>";
  echo "</table></td></tr>";

 
}


close_database(strandboernedk);
                       
                       
                       
  echo "</table>";
 
    }
   
    ?>
Avatar billede jakoba Nybegynder
10. december 2003 - 18:18 #22
Ja det skulle være ok
    (jeg undrer mig lidt over at du har lavet en separat tabel til fødselsdage. de er da ret uløseligt knyttet til personen)
Avatar billede mccookie Seniormester
10. december 2003 - 18:42 #23
Ja, det har du egentligt ret i.......
De er egentligt isoleret lidt grundet at personerne skifter navn i løbet af tiden, men som du selv nævner ikke fødselsdag......
Men ja, det kunne ligeså godt ligge i AB_PERSON

Vil du ikke have nogle point for din behjælpelighed?

Hvordan fungere sådan nogle joins??
Avatar billede jakoba Nybegynder
10. december 2003 - 19:03 #24
jons er nemmest at illustrere lidt ad gangen:

    SELECT *
    FROM  tabel1 JOIN tabel2  tabel1.person_id = tabel2_person_id

dvs bagerst  skriver du en betingelse som du ellers ville have skrevet efter WHERE
join er altid imellem 2 tabeller, så hvis der er flere end 2 er det resultatet af forrige join der joines med næste tabel:

    SELECT *
    FROM ( ( tabel1 JOIN tabel2  tabel1.person_id = tabel2_person_id )
                    JOIN tabel3  tabel1.person_id = tabel3_person_id )
                    JOIN tabel4  tabel1.person_id = tabel4_person_id
osv.

det kan godt være 2 eller flere join-betingelser. den det skal altid være simple relationer imellem felterne i de tabeller der joines.

læs evt her:  http://www.mysql.com/doc/en/JOIN.html

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester