Avatar billede BrJoe Nybegynder
02. september 2009 - 23:53 Der er 2 kommentarer og
1 løsning

Foreign key problem - forstår ikke?

Hej folk
Håber I kan hjælpe mig med foreign keys her.

Har svært ved at forstå det på ALLE tænkelige måder :S

Min database ser således ud:

--
-- Database: `webintiiexercise`
--

-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `afdeling`
--

CREATE TABLE IF NOT EXISTS `afdeling` (
  `af_id` int(4) NOT NULL AUTO_INCREMENT,
  `af_navn` varchar(20) CHARACTER SET latin1 COLLATE latin1_danish_ci NOT NULL,
  `af_tlf` varchar(8) CHARACTER SET latin1 COLLATE latin1_danish_ci NOT NULL,
  PRIMARY KEY (`af_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Data dump for tabellen `afdeling`
--

INSERT INTO `afdeling` (`af_id`, `af_navn`, `af_tlf`) VALUES
(1, 'Nord', '32413241'),
(2, 'Syd', '42413241'),
(3, 'Øst', '52413241'),
(4, 'Vest', '62413241');

-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `ansat`
--

CREATE TABLE IF NOT EXISTS `ansat` (
  `a_id` int(11) NOT NULL AUTO_INCREMENT,
  `a_navn` varchar(50) DEFAULT NULL,
  `a_loen` decimal(8,2) DEFAULT NULL,
  `a_afdeling` int(11) DEFAULT NULL,
  PRIMARY KEY (`a_id`),
  KEY `fk_a_afdeling` (`a_afdeling`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;

--
-- Data dump for tabellen `ansat`
--

INSERT INTO `ansat` (`a_id`, `a_navn`, `a_loen`, `a_afdeling`) VALUES
(1, 'Anders And', '12000.25', 2),
(2, 'Ole Olsen', '11230.75', 2),
(3, 'Hubert D. Grumbert', '23001.90', 1),
(4, 'Postmand Per', '1440.12', 2),
(5, 'Joakim Von And', '120020.25', 3),
(6, 'Abraham Lincoln', '7999.99', 3),
(7, 'Gorm Den Gamle', '112324.25', 4),
(8, 'Poul Thomsen', '52000.55', 4),
(9, 'Mikkel Henriksen', '92000.65', 1),
(10, 'Thorvald Stauning', '22034.35', 2),
(11, 'Poul Schlüter', '30000.85', 1),
(12, 'Jens Otto Kragh', '34000.65', 4),
(13, 'Steward Stardust', '23000.67', 1),
(14, 'H.C. Hansen', '22220.12', 3),
(15, 'Anker Jørgensen', '11230.95', 3),
(16, 'Anders Fogh Rasmussen', '98289.25', 1),
(17, 'Valdemar Atterdag', '7835.95', 3),
(18, 'Harald Blåtand', '38900.35', 2),
(19, 'Harald Hårfager', '12370.25', 4),
(20, 'Lars Højer Nielsen', '82673.25', 1),
(21, 'Leif Den Lykkelige', '13780.95', 2),
(22, 'Stan Getz', '12673.25', 4),
(23, 'John Coltrane', '45780.95', 3),
(24, 'Charlie Parker', '81273.25', 1),
(25, 'Herbie Hancock', '13321.95', 4);

-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `opgave`
--

CREATE TABLE IF NOT EXISTS `opgave` (
  `o_id` int(11) NOT NULL AUTO_INCREMENT,
  `o_navn` varchar(40) DEFAULT NULL,
  `o_ansat` int(11) DEFAULT NULL,
  PRIMARY KEY (`o_id`),
  KEY `fk_a_ansat` (`o_ansat`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=30 ;

--
-- Data dump for tabellen `opgave`
--

INSERT INTO `opgave` (`o_id`, `o_navn`, `o_ansat`) VALUES
(1, 'timeregistrering', 1),
(2, 'timeregistrering', 2),
(3, 'timeregistrering', 3),
(4, 'timeregistrering', 4),
(5, 'timeregistrering', 5),
(6, 'timeregistrering', 6),
(7, 'timeregistrering', 7),
(8, 'timeregistrering', 8),
(9, 'timeregistrering', 9),
(10, 'timeregistrering', 10),
(11, 'timeregistrering', 11),
(12, 'timeregistrering', 12),
(13, 'timeregistrering', 13),
(14, 'timeregistrering', 14),
(15, 'timeregistrering', 15),
(16, 'timeregistrering', 16),
(17, 'timeregistrering', 17),
(18, 'timeregistrering', 18),
(19, 'timeregistrering', 19),
(20, 'timeregistrering', 20),
(21, 'timeregistrering', 21),
(22, 'timeregistrering', 22),
(23, 'timeregistrering', 23),
(24, 'timeregistrering', 24),
(25, 'timeregistrering', 25),
(26, 'direktionsmøde', 2),
(27, 'planlægningsmøde', 3),
(28, 'projektledermøde', 5),
(29, 'englandsrejse', 7);

--
-- Begrænsninger for dumpede tabeller
--

--
-- Begrænsninger for tabel `ansat`
--
ALTER TABLE `ansat`
  ADD CONSTRAINT `fk_a_afdeling` FOREIGN KEY (`a_afdeling`) REFERENCES `afdeling` (`af_id`);

--
-- Begrænsninger for tabel `opgave`
--
ALTER TABLE `opgave`
  ADD CONSTRAINT `fk_o_ansat` FOREIGN KEY (`o_ansat`) REFERENCES `ansat` (`a_id`);


Forstår ikke hvordan jeg kan få mine a_afdeling (altså ansatte i afdelingen) foreign keys til at udskrive mine af_navn (afdelingens navn) ud ved hjælp af en mysql sætning?

Fordi til denne kode:

        <?php
           
            $resultat = mysql_query("SELECT * FROM ansat WHERE a_afdeling=af_navn")
            or die(mysql_error());
           
            while($row = mysql_fetch_array( $resultat )) {
                   
                echo "$row[a_navn] $row[a_afdeling]<br /><br />";
                   
            }
       
        ?>

Siger den:
Unknown column 'af_navn' in 'where clause'

Håber der en hjælp derude?

Tak på forhånd.
03. september 2009 - 08:02 #1
Du soeger i tabel 'ansat' efter en kolonne 'af_navn' og en saadan er der ikke i 'ansat'.

Hvis du vil have et resultat saasom dette:
1.  Anders And  12000.25  Syd
2.  Ole Olsen  11230.75  Syd
osv,

saa maa my_sql query vel skulle vaere:

"SELECT ansat.a_ID, ansat.a_navn, ansat.a_loen, afdeling.af_navn
FROM ansat, afdeling
WHERE ansat.a_afdeling = afdeling.af_id"

Der er adskillige tutorials paa google, for eksempel http://www.tizag.com/mysqlTutorial/mysqljoins.php.
25. oktober 2009 - 17:39 #2
Jeg ser at du stiller nye spoergsmaal men ikke har afsluttet et antal gamle spoergsmaal saasom dette.  Var mit svar nyttigt?  Hvis ikke, hvor har jeg misforstaaet dig, maaske kan jeg rette.  Hvis du selv har fundet ud af loesningen saa lav selv et svar med loesningen som maaske kan hjaelpe andre medlemmer og saa giv dig selv points og dermed luk spoergsmaalet.
Avatar billede BrJoe Nybegynder
28. oktober 2009 - 01:16 #3
Ja fandt ud at det på anden vis.
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