Avatar billede sabumnim Novice
03. september 2009 - 09:57 Der er 17 kommentarer og
1 løsning

Måske noget INNER JOIN?

Hej alle

Jeg har haft et spørgsmål kørende her, men uden held af nogen måde på denne.

Derfor forsøger jeg nu at omstrukturere lidt og stiller derfor spørgsmålet på en anden måde, som forhåbentlig giver et bedre afkast.
Så, here goes :0)

Jeg har en DB hvor der bl.a. ligger to tabeller:
students og orders

I orders ligger et field der hedder "ordrenr" (min increment) og i tabellen students ligger et field der hedder "email".

Disse vil jeg gerne have til at arbejde sammen så jeg kan få disse fields med ind i et a href link, som følgende:

<a href="mailto:minmail@mailadresse.dk?subject=Link fra minwebside.dk&body=http://www.minwebside.dk/view-task.php?=234">Send email til kunden</a>

Så hvis jeg opsummerer så er det sådan
TO tabeller
STUDENTS (tabel 1)
email  (field inde i tabel 1)

ORDERS (tabel 2)
ordrenr (auto increment field i tabel 2)

Disse skal ind og erstatte nogle værdier i mit a-tag
således at "ordrenr" dynamisk kommer ind og sætes i enden af view-task.php?id=xxx
og "email" adressen som kommer fra tabellen STUDENTS skal dynamisk erstatte email adressen i mailto:her@kommerdynamisk.dk

Hvordan laver jeg dette?
Jeg ved ikke om INNER JOIN eller andet kan løse dette, men vil meget gerne høre hvis I har nogle forslag.

Det anden spørgsmål som jeg nu lukker er her:
http://www.eksperten.dk/spm/885384


//Carsten
Avatar billede sw_red_6 Nybegynder
03. september 2009 - 11:40 #1
Du kan muligvis lave det med INNER JOIN..

Hvordan forbinder du STUDENT og ORDERS?
Avatar billede sabumnim Novice
03. september 2009 - 12:22 #2
Hej igen sw

Det var det jeg håbede på at kunne gøre med INNER JOIN, men hvis du har andre muligheder så er jeg åben for det også.

Jeg har forbindelsen til min mysql længere oppe i koden, så der er kontakt til min DB

//Carsten
Avatar billede sw_red_6 Nybegynder
03. september 2009 - 13:19 #3
ja, men du skal stadig have et felt at joine de to tabeller med..

hvordan ved du hvilken 'ORDER' der hører til en 'STUDENT'?

Du kan læse lidt mere om INNER JOIN her:
http://dev.mysql.com/doc/refman/5.0/en/join.html
Avatar billede sabumnim Novice
03. september 2009 - 13:27 #4
Hejsa

På den side hvor dette "email" står på, er en side som kommer fra ordre systemet, hvilket vil sige at den har et ordrenr (eller ordre ID) i enden af URL, så jeg tænkte man kunne på en eller anden måde få kombineret.

Når der er lagt en ordre i systemet vil man kunne finde den pågældende ordre, og når man kommer herind vil alle oplysninger stå som da man oprettede ordren.

Der vil bl.a. står noget med:
Kundens navn (som kommer fra en select box)
$kunderef = addslashes($kunderef);

Desuden vil der være en ansvarlig for udførslen af opgaven, som er benævnt ved navn
$oprettet_for = addslashes ($oprettet_for);

Disse to fields kommer fra hver sin tabel, hvor den første kunderef kommer fra tabellen "client" og den anden kommer fra tabellen "students"

Ved ikke om det hjælper?
Jeg poster gerne mere kode hvis det kan hjælpe på sagen

//Carsten
Avatar billede sw_red_6 Nybegynder
03. september 2009 - 14:59 #5
jeg vil godt se din database struktur..

Det kan gøres vha.
$sql = "SELECT student.email FROM orders INNER JOIN student ON student.feltnavn = orders.feltnavn WHERE orders.OrderID = ".$OrderID.";";
$result = mysql_query($sql);

Der skal de 2 "feltnavn" skiftes ud med navnet på de felter som hører sammen i de to tabeller...
Avatar billede sabumnim Novice
03. september 2009 - 15:13 #6
Hej sw


Her kommer db struktur for tabellen "orders"

CREATE TABLE IF NOT EXISTS `orders` (
  `ordreid` int(11) NOT NULL AUTO_INCREMENT,
  `ordredato` date NOT NULL DEFAULT '0000-00-00',
  `deadline` tinytext NOT NULL,
  `type_opgave` tinytext NOT NULL,
  `skaffer` tinytext,
  `ordre_overskrift` tinytext NOT NULL,
  `ordrebeskrivelse` text,
  `antal_format` tinytext NOT NULL,
  `antal_sider` tinytext NOT NULL,
  `antal_farver` tinytext,
  `kunderef` tinytext NOT NULL,
  `oprettet_for` tinytext NOT NULL,
  `godkendt` tinytext NOT NULL,
  PRIMARY KEY (`ordreid`),
  KEY `ONR` (`ordreid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT AUTO_INCREMENT=3 ;


Og tabellen for "students"
CREATE TABLE IF NOT EXISTS `students` (
  `student_id` int(11) NOT NULL AUTO_INCREMENT,
  `opret_dato` date NOT NULL,
  `slutdato` tinytext NOT NULL,
  `navn` tinytext NOT NULL,
  `brugernavn` tinytext NOT NULL,
  `mobiltlf` varchar(8) NOT NULL,
  `telefon` varchar(8) NOT NULL,
  `cpr` tinytext NOT NULL,
  `adresse` tinytext NOT NULL,
  `bynavn` tinytext NOT NULL,
  `email` tinytext NOT NULL,
  `webside` tinytext NOT NULL,
  PRIMARY KEY (`student_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;


//Carsten
Avatar billede sw_red_6 Nybegynder
03. september 2009 - 15:58 #7
hmm, måske du skulle ændre lidt i tingene..

Tilføj en student_id på din orders så kan du bruge den til at joine på.

så vil din join se sådan ud:
INNER JOIN student ON student.student_id = orders.student_id

Som det er nu kan du ikke være sikker på at du får fat i den rigtige email adresse eftersom det er ikke er nogen forbindelse mellem de 2 tabeller...
Avatar billede sabumnim Novice
04. september 2009 - 08:18 #8
Hej sw

Skal det så være sådan her evt:

CREATE TABLE IF NOT EXISTS `orders` (
  `ordreid` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` tinytext AUTO_INCREMENT, (nyt field tilføjet her)
  `ordredato` date NOT NULL DEFAULT '0000-00-00',
  `deadline` tinytext NOT NULL,
  `type_opgave` tinytext NOT NULL,
  `skaffer` tinytext,
  `ordre_overskrift` tinytext NOT NULL,
  `ordrebeskrivelse` text,
  `antal_format` tinytext NOT NULL,
  `antal_sider` tinytext NOT NULL,
  `antal_farver` tinytext,
  `kunderef` tinytext NOT NULL,
  `oprettet_for` tinytext NOT NULL,
  `godkendt` tinytext NOT NULL,
  PRIMARY KEY (`ordreid`),
  KEY `ONR` (`ordreid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT AUTO_INCREMENT=3 ;


Eller skal den nye student_id indeholde blot tinytext ?

//Carsten
Avatar billede sw_red_6 Nybegynder
04. september 2009 - 08:50 #9
nej..

student_id skal være fremmed nøgle til din primær nøgle i STUDENTS-tabellen så de skal være af samme type..

CREATE TABLE IF NOT EXISTS `orders` (
  `ordreid` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) NOT NULL DEFAULT 0, (nyt field tilføjet her)
  `ordredato` date NOT NULL DEFAULT '0000-00-00',
  `deadline` tinytext NOT NULL,
  `type_opgave` tinytext NOT NULL,
  `skaffer` tinytext,
  `ordre_overskrift` tinytext NOT NULL,
  `ordrebeskrivelse` text,
  `antal_format` tinytext NOT NULL,
  `antal_sider` tinytext NOT NULL,
  `antal_farver` tinytext,
  `kunderef` tinytext NOT NULL,
  `oprettet_for` tinytext NOT NULL,
  `godkendt` tinytext NOT NULL,
  PRIMARY KEY (`ordreid`),
  KEY `ONR` (`ordreid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT AUTO_INCREMENT=3;
Avatar billede sabumnim Novice
04. september 2009 - 09:00 #10
Hej igen

Så den create table du har lagt her er den måde der skal oprettes en student_id ?

//Carsten
Avatar billede sabumnim Novice
07. september 2009 - 09:45 #11
Hej igen (sw)

Er du stadig med og kan du give mig noget opklaring på min forespørgsel fra i fredags?

//Carsten
Avatar billede sw_red_6 Nybegynder
07. september 2009 - 13:30 #12
beklager, havde lidt travlt i fredags..

Ja, det er sådan jeg ville ligge student_id ind..

Måske du skulle kigge lidt på databaser generelt for at få et indblik i hvordan man laver den slags..? især mht. nøgler og relationer...
Avatar billede sabumnim Novice
07. september 2009 - 17:57 #13
Hej sw

Jeg skal lige høre efter en ting, hvilket indhold skal der ind her?
For hvis den skal have titlen "student_id", hvad skal der så sættes ind her, for jeg kunne forestille mig at det har en eller anden relevans for selve INNER JOIN?

Du siger en "foreign key" tidligere, og hvad dækker det specifikt over?
Og sådan en "foreign key" skal den incrementes eller ?

//Carsten
Avatar billede sw_red_6 Nybegynder
09. september 2009 - 10:22 #14
Det der skal stå i student_id er den id som hører til den person som skal have en email, dvs at det skal være id fra STUDENT-tabellen..

foreign key:
http://en.wikipedia.org/wiki/Foreign_key
http://articles.techrepublic.com.com/5100-10878_11-6035435.html

Lidt om database:
http://en.wikipedia.org/wiki/Relational_database
Avatar billede sabumnim Novice
28. september 2009 - 22:43 #15
Hej SW

Er du stadig med på denne?

Jeg har været lidt ophængt og haft lidt ferie oven i, men er nu klar igen og vil gerne have afsluttet denne om muligt.

Har været inde og kigge lidt på dine links som du sendte den 9.sept.

Der ser det jo ud til at min tabel SKAL være sat til InnoDB, og jeg har jo sat min tabel MyISAM.

Så her kan det vel ikke lade sig gøre at definere en FOREIGN KEY, er det korrekt?
Desuden har jeg omdøbt følgende:
- tabellen "students" er student_id omdøbt til "id"
- tabellen "orders" er ordre_id omdøbt til "id"

Hvordan kommer jeg videre herfra?

//Carsten
Avatar billede sw_red_6 Nybegynder
02. oktober 2009 - 09:38 #16
Du behøves ikke ændre din tabel fra MyISAM til innoDB, men det ville være en fordel..

Det skal stadig laves som var det en foreign key, MyISAM ignorerer det, men det skal stadig laves på den måde...

student_id i tabellen "orders" skal pege på en id(primary key) fra tabellen "students", på den måde kan du bruge det felt i "orders" til at hente navn osv. fra "students"
Avatar billede sabumnim Novice
02. september 2010 - 19:37 #17
Hej SW_red

Jeg har ikke fået dette op at køre endnu, men fandt senere en anden løsning.
Men derfor skal du jo ikke snydes for point, for din hjælp.

Så læg venligst et svar hvis du ønsker nogle point, og tak for hjælpen alligevel.

//Carsten
Avatar billede sabumnim Novice
23. september 2010 - 21:40 #18
Svarer selv, da jeg kan se ud fra SW_red profilen at han ikke har været på EXP.dk siden oktober 2009
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