09. december 2003 - 20:03Der 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);
Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
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?
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.
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
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() );
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
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,
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.
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.
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
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?
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!
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
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?
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:
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.