Avatar billede staf Nybegynder
01. maj 2003 - 23:19 Der er 21 kommentarer og
1 løsning

Udskriv relationstabel - hent navne fra andre tabeller!!!

Hejsa
Sidder og roder med en registreringsdatabase.
Min model til denne DB ser i form af et klassediagram, således ud: http://www.gyldendal.adsl.dk/stephan/klassediagram.html

Jeg arbejder i mysql og bruger php. Undskylder hvis der i mit sp. er noget phpkode med! Det er for at kunne formulere mit problem sammenhængende.

det jeg gerne vil er at samle en række registreringer i  relationstabellen, for herefter at udskrive denne.
Mit problem er at jeg gerne vil hente fx. produktnavn i produkttabellen, ved hjælp af produktID`et i registreringstabellen.
Jeg har lidt svært ved at strikke dette sammen i min kode.
Jeg har hentet alle data fra registreringstabellen med:
------------------------------------------------------
$samlet_resultat = mysql_query("select * from registreringer);
while ($row = mysql_fetch_array($samlet_resultat)) {
$afdelingsID = $row['afdelingsID'];
$stueID = $row['stueID'];
$opgangsID = $row['opgangsID'];
$lejelighedsID = $row['lejelighedsID'];
$produktID = $row['produktID'];
$antal = $row['antal'];
$ugedag = $row['ugedag'];
$dato = $row['dato'];
$maaned = $row['maaned'];
$aar = $row['aar'];
$tidspunkt = $row['tidspunkt'];
}
----------------------------------------------------
Fint nok!
Nu vil jeg gerne hente produktnavn fra produkt tabellen, ved hjælp af produktID`et i relationstabellen.
Jeg siger derfor:
----------------------------------------------------
$produktnavn = mysql_query("SELECT produktnavn FROM produkter WHERE produktID = '$produktID'");
while ($row = mysql_fetch_array($produktnavn)) { 
echo $row['produktnavn']
}
-----------------------------------------------------

Intil videre har jeg indtastet 3 registreringer med 3 produkter. Men det der sker når jeg echo`er produktnavnet, er at kun det sidst "ankomne" bliver udskrevet???

Hvad er problemet! Eller fremgangsmåden hvis jeg er helt galt på den??

Super cool hvis i kunne hjælpe. Da det er til et eksamenprojekt.
På forhånd tak!
Avatar billede disky Nybegynder
01. maj 2003 - 23:35 #1
hvad får du af resultat når du kører din sql direkte i MySQL ?
Avatar billede erikjacobsen Ekspert
01. maj 2003 - 23:41 #2
du skal nok flytte din $produktnavn=..linie ind i while-løkken.

Dine udtræk fra $row kan gøres i én sætning.

    extract($row);
Avatar billede erikjacobsen Ekspert
01. maj 2003 - 23:42 #3
Ja, linien + den nederste whileløkke.

Og så for at få lidt mysql ind i det, så når det virker,
skal du måske til at kigge lidt på en join i SQL.
Avatar billede disky Nybegynder
01. maj 2003 - 23:44 #4
erik:
Hvad skulle det gøre at udføre den samme sql query flere gange i while løkken ?

Måske et dumt spørgsmål men jeg er ikke lige php haj
Avatar billede erikjacobsen Ekspert
01. maj 2003 - 23:49 #5
Den samme, men med forskelligt produktid. Og det er jo en join ;)
Avatar billede disky Nybegynder
02. maj 2003 - 00:02 #6
ah, du mener i den første while ? eller ?
Avatar billede staf Nybegynder
02. maj 2003 - 00:02 #7
>> Disky
Har ikke kørt forespørgelsen direkte i mysql. Da jeg anvender en php variabel i min forespørsel. Er ikke helt dus med joints endnu.

>>Erik
Så skulle jeg flytte forespørsel nr.2 (den hvor jeg henter produktnavn), ind i while-løkken på den første eller?? Er ikke helt med?

Ville en joint være en bedre/hurtigere løsning?
I så fald hvorledes skal den se ud? Har ikke rigtig arbejdet med joint før. Men måske noget ala:
------------------------------------------------
$produktnavn = mysql_query("select registreringer.produktID, produkter.produktnavn, FROM registreringer, produkter WHERE registreringer.produktID = produkter.produktID");

eller????
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 00:07 #8
Ja, du skal nok joine. Men os lige se om vi kan gøre hvad du prøver på her.
UTestet:

$samlet_resultat = mysql_query("select * from registreringer);
while ($row = mysql_fetch_array($samlet_resultat)) {
  extract($row);
  $produktnavn = mysql_query("SELECT produktnavn FROM produkter WHERE produktID = '$produktID'");
  while ($row = mysql_fetch_array($produktnavn)) { 
    echo $row['produktnavn']
  }
  mysql_free_result($produktnavn);
}
Avatar billede disky Nybegynder
02. maj 2003 - 00:07 #9
nu er vi vist ret langt udenfor området i denne gruppe, php gruppen ville være mere korrekt.

Staf flyt venligst spørgsmålet derover.
Avatar billede staf Nybegynder
02. maj 2003 - 00:08 #10
OK lækkert! Det virker når jeg rykker denne:
--------------------------------------------
$produktnavn = mysql_query("SELECT produktnavn FROM produkter WHERE produktID = '$produktID'");
while ($row = mysql_fetch_array($produktnavn)) {
echo $row['produktnavn']
}
-----------------------------------------------
Så skal jeg bare lige have styr på jointen
Avatar billede staf Nybegynder
02. maj 2003 - 00:09 #11
Fair nok disky!!
Kan godt se vi er lidt langt ude. Men en joint er da REN SQL :)
Det er det eneste jeg mangler.
Avatar billede disky Nybegynder
02. maj 2003 - 00:10 #12
korrekt, men erik's svar og det han mener er dit problem er rent PHP som ikke er indenfor denne gruppes område.

Så hvis i holder tråden indenfor ren MySQL er det helt okay :)
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 00:11 #13
Nu kommer vi til sql-en med join...

Prøv dette - Utestet

$samlet_resultat = mysql_query("select * from registreringer,produktnavn where registreringer.produktID=produktnavn.produktID");
while ($row = mysql_fetch_array($samlet_resultat)) {
  extract($row);
  echo "$produktID: $produktnavn<br>";
}
mysql_free_result($produktnavn);
Avatar billede staf Nybegynder
02. maj 2003 - 00:11 #14
>> Erik
Du er BARE hurtigt! kan næsten ikke følge med :)
Prøver lige din seneste! nåede ikke at se den!
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 00:12 #15
(staf: det er ikke disky der bestemmer hvad der må og
ikke må være her. Det er heller ikke mig)
Avatar billede staf Nybegynder
02. maj 2003 - 00:13 #16
Super lækkert Erik!

Du er en ven af folket :)
Det spiller! Jeg takker!

60 point til dig hvis du lige smider et svar
Avatar billede disky Nybegynder
02. maj 2003 - 00:18 #17
erik:
Utroligt med dig du har været her så længe og du forstår ikke systemmet endnu, imponerende.
Avatar billede staf Nybegynder
02. maj 2003 - 00:25 #18
Disky! Jeg har svært ved at se hvorledes det skal være muligt at holde overblikket og sætte sig ind i en problem hvis man (efter DIN mening), ikke må poste overlappende kode OVERHOVEDET??
Kan sagtens forstå at noget kan være irrelevant, men hvordan skal en spørger kunne udskille dette (i et mysql/php relateret problem), hvis spørger ikke umiddelbart selv kan identificere problemet??

Havde denne tråd været STOPPET halvejs oppe. Havde den været ufærdig og dermed TOTALT ubrugelig for en der evt. måtte sidde med samme problem. Og netop var dumpet ned i den tråd ved en søgning.
Det synspunkt må du da kunne se lidt fornuft i ? :)

Som tråden har udviklet sig nu, kan det være en løsning for 10 andre på et senere tidspunkt!
Avatar billede disky Nybegynder
02. maj 2003 - 00:33 #19
jeg siger ikke at man ikke må, men dit problem startede med et tvivlsspørgsmål og endte med at være 99% php relateret, okay i fandt så et svar.
Men havde tråden fortsat havde det egentligt været irelevant for denne gruppe, vi er mange der bruger MySQL til andet end PHP og for os er det temmeligt træls konstant at se php i denne gruppe, specielt når der er en særdeles velfungerende php gruppe på sitet.

Skulle det være løst fint, havde en admin flyttet tråden til php gruppen, ligeså snart man så at problemmet ikke var MySQL relateret.

Balladen er at mange roder rondt i det og nogle ligefrem tror at mysql og php er næsten samme ting, jeg ved godt du kender forskellen :) Det er bare generelt iaktaget, ikke personligt.

Men det vigtigste er at du har fået hjælp, men næste gang prøv i php gruppen istedet, 99% af folks problemmer med php,mysql er php relateret :)
Avatar billede staf Nybegynder
02. maj 2003 - 00:51 #20
>>disky
Kan stadig godt følge dit synspunkt. Kunne man selv flytte trådene sammen med alle svar, ville det selvfølgelig være ideelt. Den er jeg helt med på. Men syntes stadig det er "ærgerligt" at stoppe en halvfærdig tråd for derefter at stille det samme sp. i en anden kategori.

Nevermind!!
alt i orden:)

> Erik
Du ligger som sagt bare et svar :)
Avatar billede disky Nybegynder
02. maj 2003 - 00:55 #21
Korrekt at lukning og oprettelse af samme spørgsmål er en dårlig løsning.

Men folkene bag sitet synes åbenbart ikke der skal være mere end meget få og meget lidt aktive admin's her :(

Held og lykke med dit hosting :)

Nu er der dømt nattesøvn her :)

Sov godt.
Avatar billede staf Nybegynder
07. maj 2003 - 21:41 #22
Lukket og flyttet til: http://www.eksperten.dk/spm/349843
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
Computerworld tilbyder specialiserede kurser i database-management

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