Avatar billede straszek Praktikant
24. november 2001 - 18:22 Der er 13 kommentarer og
3 løsninger

Data fra flere tabeller

Jeg har en database med to tabeller - \"varer\" og \"bestillinger\". Alle poster i \"varer\" har et unikt id nummer.

På en bestillingsside henter jeg alle poster fra \"varer\" ind i en dropdownbox. Bestillingers oplysningerne, navn, adresse, varer m.m bliver gemt i tabellen \"bestillinger\".

Og nu kommer spørgsmålet:

Kunne det lade sig gøre at gemme varens id nummer i tabellen \"bestillinger\", i stedet for som nu hvor jeg gemmer hele teksten.?

håber det gav mening


Søren

 
Avatar billede tmceu Praktikant
24. november 2001 - 19:12 #1
Ja, og det vil faktisk være meget bedre end det du gør nu. Og være mere korrekt i.f.t. en relationel database.

Den løsning du har nu, har den helt klare ulempe, at du eks. opretter en vare med ID 100 og en varetekst som efterfølgende gemmes i x antal poster i bestillinger. Du finder nu ud af, at du har lavet en fejl i vareteksten og denne skal du derfor rette i både varer og alle eksisterende poster i bestillinger.

Hvis du gemmer varens ID i bestillinger i stedet, skal du kun rette vareteksten i varer.

Er dette svar nok på dit spørgsmål, eller mangler du hjælp til at lave det konkret ?
Avatar billede straszek Praktikant
24. november 2001 - 19:29 #2
Det var også det jeg havde tænkt, men jeg har ingen ide om hvordan jeg skal få det lavet. Er det noget med join eller noget helt andet?


M.v.h. Søren
Avatar billede tmceu Praktikant
24. november 2001 - 19:53 #3
Ja og nej :-)

Du skal bruge et join når du skal trække data ud, men ikke når du ligger bestillinger ind.

Hvis du eks. har flg. tabeller

Varer

VareID
VareNavn
VarePris

Bestillinger

BestID
VareID
Antal

Kan du trække alle poster med varenavn for en bestemt bestilling ud med dette SQL statement

SELECT VareNavn, Antal, (Antal*VarePris) AS Pris FROM Bestillinger JOIN Varer ON Bestillinger.VareID=Varer.VareID WHERE BestID=10
Avatar billede cyberdude Nybegynder
25. november 2001 - 11:39 #4
hejsa!

Der hvor du nu indsætter teksten fra din vare tabel i bestillings tabellen, det skal \"bare\" ændres til at indeholde id nummeret fra vare tabellen.......
Hvis du poster din fil for der hvor du hiver dataene ud af vare tabellen (der hvor de vises for kunden!)
og så den hvor de bliver gemt i bestillings tabellen
Samt strukturen for dine databaser!
Avatar billede cyberdude Nybegynder
25. november 2001 - 11:40 #5
så skal jeg og evt. andre hjælpe med at sætte det ind!
Avatar billede straszek Praktikant
25. november 2001 - 11:56 #6
Hejsa

Strukturen for min to databaser, som slet ikke har noget med varer at gøre - det var bare som eksempel,  er:

\"Gym\":

Gymnasie
Adresse
Postnr/by.
ID

\"Kontaktpersoner\":

Gymnasie
Navn
Adresse
Postnr/by.
Klasse
Email

Sådan hiver jeg oplysninger om gymnasier ud af  \"Gym\" og viser dem for brugeren:

$conn = mysql_connect(\"localhost\", \"root\", \"xx\");
mysql_select_db(\"GLO\");

// Hent data ud
$resultat = mysql_query(\"select Gymnasie from Gym ORDER BY Gymnasie\") or die(mysql_error());
echo \"Opret TP arrang¯r\";
echo \"<form action=opret2.php method=post>\";
echo \"<table>
<tr><td>Navn<td> <input type=text size=20 Name=Navn>
<tr><td>Adresse<td> <input type=text size=20 Name=Adresse>
<tr><td>Postnr.<td> <input type=text size=4 Name=Postnr>
<tr><td>By<td> <input type=text size=20 Name=City>
<tr><td>Klasse<td> <input type=text size=20 Name=Klasse>
<tr><td>Email<td> <input type=text size=20 Name=Email>
<tr><td>Telefon<td> <input type=text size=8 Name=Telefon></table>
<tr><td>Gymnasie <select name=Gymnasie>\";
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);
echo \"<p><option value=\\\"$Gymnasie\\\">$Gymnasie</option>\";
  }
echo \"<p>
</form>\";
echo \"  <input type=submit value=Opret>\";


Og her bliver de gemt i \"kontaktpersoner\":

<?php
global $HTTP_POST_VARS;
$conn = mysql_connect(\"localhost\", \"root\", \"xx\");
mysql_select_db(\"GLO\");



$insertSQL = \"INSERT INTO Kontaktpersoner (ID_tp, Navn, Adresse, City, Klasse, Postnr, Email, Telefon, Arrangoer_status, Gymnasie) VALUES (\'\', \'$Navn\', \'$Adresse\', \'$City\', \'$Klasse\', \'$Postnr\', \'$Email\', \'$Telefon\', \'$Arrangoer_status\', \'$Gymnasie\')\";

mysql_query($insertSQL);


Header (\"Location: arr.php\");

mysql_close($conn);
?>


mvh. Søren


Avatar billede cyberdude Nybegynder
25. november 2001 - 12:32 #7
// der hvor de vises for brugeren!

$resultat = mysql_query(\"select Gymnasie,ID from Gym ORDER BY Gymnasie\") or die(mysql_error());
echo \"Opret TP arrang¯r\";
echo \"<form action=opret2.php method=post>\";
echo \"<table>
<tr><td>Navn<td> <input type=text size=20 Name=Navn>
<tr><td>Adresse<td> <input type=text size=20 Name=Adresse>
<tr><td>Postnr.<td> <input type=text size=4 Name=Postnr>
<tr><td>By<td> <input type=text size=20 Name=City>
<tr><td>Klasse<td> <input type=text size=20 Name=Klasse>
<tr><td>Email<td> <input type=text size=20 Name=Email>
<tr><td>Telefon<td> <input type=text size=8 Name=Telefon></table>
<tr><td>Gymnasie <select name=Gymnasie>\";
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);
echo \"<p><option value=\\\"$raekke[1]\\\">$raekke[0]</option>\";
  }
echo \"<p>
</form>\";
echo \"  <input type=submit value=Opret>\";


//her indsættes de i kontaktpersoner!

<?php
global $HTTP_POST_VARS;
$conn = mysql_connect(\"localhost\", \"root\", \"xx\");
mysql_select_db(\"GLO\");



$insertSQL = \"INSERT INTO Kontaktpersoner (ID_tp, Navn, Adresse, City, Klasse, Postnr, Email, Telefon, Arrangoer_status, Gymnasie) VALUES (\'\', \'$Navn\', \'$Adresse\', \'$City\', \'$Klasse\', \'$Postnr\', \'$Email\', \'$Telefon\', \'$Arrangoer_status\', \'$Gymnasie\')\";

mysql_query($insertSQL);


Header (\"Location: arr.php\");

mysql_close($conn);
?>


Nu vil feltet $Gymnasie indeholde id nummeret fra tabellen Gym


Måske du skal rette i denne linie
echo \"<p><option value=\\\"$raekke[1]\\\">$raekke[0]</option>\";

Da du bruger en extract($raekke); hvilket jeg ikke lige ved hvad gør, da jeg endnu ikke er støt ind i den :-))

Men hvis det ikke virker som det er nu så udskift
$raekke[1] med $ID og $raekke[0] med $Gymnasie
 
Avatar billede straszek Praktikant
25. november 2001 - 12:58 #8
Der er et eller andet der ikke passer - nu bliver alle gymnasier vist som  under hinnanden uden for dropdownboxen, og kan derfor ikke vælges.

se evt. www.glo.dk/tp/opret.php

brugernavn:aht
pass: spasmander

Søren
Avatar billede mortenfn Nybegynder
25. november 2001 - 13:54 #9
for mig at se afslutters formen inden submit
Avatar billede mortenfn Nybegynder
25. november 2001 - 14:09 #10
husk der er forskeld på ID og id der slelnes mellem store og små bogstaver

du har også glemt </select>

echo \"tr><td>Gymnasie <select name=Gymnasie>\";
while($raekke = mysql_fetch_array($resultat))
echo \"<option value=\\\"$raekke[ID]\\\">$raekke[Gymnasie]</option>\";
echo \"</select>\";
echo \"<input type=submit value=Opret>\";
echo \"</form>\";
Avatar billede straszek Praktikant
25. november 2001 - 14:31 #11
Tak for svarene

Jeg har desværre først tid til at kigge mere på det på onsdag, men vil her efter meld tilbage om hvordan resultatet falder ud. Håber det er ok.

M.v.h. Søren
Avatar billede straszek Praktikant
27. november 2001 - 13:36 #12
Det virker jo som det skal, eneste spørgsmål er nu hvordan jeg på en bekraft/vis side med oplysninger fra \"kontaktpersoner\" får lavet gymnasienummeret om til at vise gymnasienavnet i stedet for nummeret.

Søren
 
Avatar billede cyberdude Nybegynder
27. november 2001 - 15:32 #13
smid lige den kode ind hvor den er gal... så kigger vi på den!!
Avatar billede straszek Praktikant
27. november 2001 - 21:29 #14
Hej

Her er koden der henter oplysninger ud af \"tp\"


<?php include(\"../php/side_midt3.php\"); ?>
<!-- IndsÊt hovedteksten her -->
<?php
$conn = mysql_connect(\"localhost\", \"root\", \"xx\");
mysql_select_db(\"GLO\");
// Hent data ud

$resultat = mysql_query(\"select * from TP\") or die(mysql_error());

// K¯r s igennem for hver rÊkke
echo  \"<table><tr bgcolor=#C0C0C0><td><b><font size=-2>Gymnasie<td><b><font size=-2>Arrang¯r<td><b><font size=-2>Klasse<td><b><font size=-2>Telefon<td><b><font size=-2>Email</B>\";
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);
  $bgcolor = $dark ? \"#C0C0C0\" : \"#FFFFFF\";
  $dark = !$dark;
 
  echo \"<tr bgcolor=\'$bgcolor\'><td font size=-2><font size=-2>$Gymnasie <td><font size=-2>$Navn <td><font size=-2>$Klasse <td><font size=-2>$Telefon $By1 <td><a href=mailto:$Email><font size=-2>$Email</A><br>\";
}
mysql_close($conn);
echo \"</table>\";


?>
Avatar billede cyberdude Nybegynder
30. november 2001 - 01:08 #15
jeg vil tro du skal udskifte $Gymnasie
med $raekke[Gymnasie]

Men er dog ikke sikker!

Hvis det ikek virker, så smid lige din tabel opsætning også, så er det lidt nemmere at se hvad der kommer ind hvor i tabellen :-))
Avatar billede straszek Praktikant
14. december 2001 - 11:18 #16
Det var ikke det her er hele min tabel:

$resultat = mysql_query(\"select * from TP\") or die(mysql_error());

// Kør så igennem for hver række
echo  \"<table><tr bgcolor=#C0C0C0><td><b><font size=-2>Gymnasie<td><b><font size=-2>Arrangør<td><b><font size=-2>Klasse<td><b><font size=-2>Telefon<td><b><font size=-2>Email</B>\";
while ($raekke = mysql_fetch_array($resultat)) {
  extract($raekke);
  $bgcolor = $dark ? \"#C0C0C0\" : \"#FFFFFF\";
  $dark = !$dark;
 
  echo \"<tr bgcolor=\'$bgcolor\'><td font size=-2><font size=-2>$Gymnasie <td><font size=-2>$Navn <td><font size=-2>$Klasse <td><font size=-2>$Telefon $By1 <td><a href=mailto:$Email><font size=-2>$Email</A><br>\";
}
mysql_close($conn);
echo \"</table>\";
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