Avatar billede kviller Novice
28. december 2006 - 16:10 Der er 3 kommentarer og
1 løsning

Opskrifter henter ingrediens

Jeg har følgende database structure:


--
-- Struktur-dump for tabellen `MCE_ingrediens`
--

CREATE TABLE `MCE_ingrediens` (
  `ID` int(11) NOT NULL auto_increment,
  `innavn` varchar(50) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Data dump for tabellen `MCE_ingrediens`
--

INSERT INTO `MCE_ingrediens` (`ID`, `innavn`) VALUES
(1, 'sukker'),
(2, 'mel'),
(3, 'vand'),
(4, 'gær');

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

--
-- Struktur-dump for tabellen `MCE_maengde`
--

CREATE TABLE `MCE_maengde` (
  `opskriftid` int(11) NOT NULL,
  `ingrediensid` int(11) NOT NULL,
  `maengde` int(11) NOT NULL,
  `enhed` varchar(10) NOT NULL,
  PRIMARY KEY  (`opskriftid`,`ingrediensid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Data dump for tabellen `MCE_maengde`
--

INSERT INTO `MCE_maengde` (`opskriftid`, `ingrediensid`, `maengde`, `enhed`) VALUES
(1, 1, 100, 'gram'),
(1, 3, 2, 'Deciliter');

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

--
-- Struktur-dump for tabellen `MCE_opskrift`
--

CREATE TABLE `MCE_opskrift` (
  `ID` int(11) NOT NULL auto_increment,
  `opnavn` varchar(50) NOT NULL,
  `katagori` int(11) NOT NULL,
  `oprettet` varchar(20) NOT NULL,
  `beskr` varchar(500) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Data dump for tabellen `MCE_opskrift`
--

INSERT INTO `MCE_opskrift` (`ID`, `opnavn`, `katagori`, `oprettet`, `beskr`) VALUES
(1, 'Sukkervand', 3, 'Jakob', 'Bland lortet sammen og se hvad der sker.');



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

Ud fra det vil jeg jo gerne hente opskrift nummer 1 (Ja der er jo ikke andre endnu) Så derfor har jeg prøvet at lave et lille test script som ser således ud:


<?php

include 'db.php';
$opskrift = 1;

$Rec = "SELECT o.ID, o.opnavn, o.katagori, o.oprettet, o.beskr, m.opskriftid, m.ingrediensid, m.maengde, m.enhed, i.ID, i.innavn
    FROM MCE_opskrift o, MCE_maengde m, MCE_ingrediens i
    WHERE (o.ID = $opskrift) AND (m.opskriftid = $opskrift)";
$getRecResult = mysql_query($Rec,$db);


while ($aRec = mysql_fetch_array($getRecResult)){


    echo $aRec['opnavn'];
    echo " opnavn<br />";
    echo $aRec['enhed'];
    echo " enhed<br />";
    echo $aRec['innavn'];
    echo " innavn<br />";
};
?>

Meeen jeg kan ikke rigtig finde ud af hvordan jeg får den til at filtrere, så jeg kun får dem jeg har brug for, da jeg jo sætter $opskrift=1 i starten vil jeg jo kun have ID1 fra MCE_opskrift en enkelt gang og så det antal fra MCE_mængde hvor m.opskriftid = 1 og samtidig hente alle dem fra MCE_ingrediens hvor m.ingrediensid = i.ID

Håber I forstår meningen, men jeg er godt klar over jeg er helt galt på den.

Giver 200points da det jo nok er et helt nyt script der skal laves?
Avatar billede kviller Novice
28. december 2006 - 16:14 #1
PS. Har først tid til at kigge på det i morgen, da konen siger vi skal være sociale i aften. (Har lidt glemt hvad det betyder)
Avatar billede pidgeot Nybegynder
02. januar 2007 - 01:12 #2
Du mangler at kæde tabellerne sammen i din query. Dvs. du til sidst skal tilføje "AND o.ID=m.opskriftid AND m.ingrediensid=i.ID"

...samtidigt kan du så også fjerne m.opskriftid = $opskrift, da denne automatisk er impliceret når du siger at o.ID og m.opskriftid skal være identiske. Tillige behøver du ikke selecte de felter der kun skal bruges til at kæde tabeller sammen, så du ender med en SQL-sætning i stil med følgende:

SELECT o.ID, o.opnavn, o.katagori, o.oprettet, o.beskr, m.maengde, m.enhed, i.ID, i.innavn FROM MCE_opskrift o, MCE_maengde m, MCE_ingrediens i WHERE o.ID = $opskrift AND o.ID=m.opskriftid AND m.ingrediensid=i.ID

Afhængigt af hvad du skal bruge, kan det ske du skal have fjernet andre kolonner.

Når du laver et EGENTLIGT system, vil jeg i øvrigt lige anbefale dig at du hiver dataene fra MCE_opskrift ud i en query, og mængder og ingredienser ud i en anden, da du jo ikke skal bruge opskriftens navn for hver enkelt ingrediens.
Avatar billede kviller Novice
02. januar 2007 - 10:13 #3
Hej Pidgeot.

Mange tak for hjælpen, jeg har nok også lidt brug for hjælp til at dele det ud i 2 queryes, men kan du ikke lige smide et svar, så jeg kan give dig points?
Avatar billede pidgeot Nybegynder
02. januar 2007 - 12:18 #4
Svar kommer her.

De to queries ville være:

SELECT o.ID, o.opnavn, o.katagori, o.oprettet, o.beskr FROM MCE_opskrift o WHERE o.ID = $opskrift

SELECT m.maengde, m.enhed, i.ID, i.innavn FROM MCE_maengde m, MCE_ingrediens i WHERE m.opskriftid = $opskrift AND m.ingrediensid=i.ID
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