Mit php mehrere SQL tabellen ausgeben

drabbit

Mitglied
Hallo zusammen,

ich habe folgendes Problem: Ich möchte aus 3 Tabellen verschiedene Werte ausgeben lassen.

Jetzt weiß ich nicht wie ich das am besten mit php hinbekomme...

Also ich habe:
Produkte: (id) (name) (preis) -> Auflistung der Produkte
zutaten: (id) (preis) (name) -> zusammenfassung der Zutaten
ProdTOzut: (id) (produktid) (zutatenid) -> "Verknüpfung" der Zutaten mit den Produkten

Ausgeben möchte ich das jetzt so:

Produktname
Zutat 1, Zutat2
Zutatenbearbeiten (nur link) [ ] Stück Preis (Button = in den Warenkorf)



Jetzt weiß ich nicht wie ich die SQL Abfrage gestalten soll damit ich alles auf einmal bekomme, bzw. weiß ich auch nicht wie ich die Daten mit php ausgeben soll...
 
Hi, das kannst du in dieser Art machen, wenn du die tabellen verküpfen möchtest, dann google mal nach "mysql join".
PHP:
$sql = "SELECT `table1`.`col` as t1col, `table2`.`col` as t2col FROM `table1`, `table2`";

Verknüpfen:
PHP:
$sql = "SELECT `table1`.`col` as t1col, `table2`.`col` as t2col FROM `table1`, `table2` WHERE `table1`.`id` = `table2`.`id`";
ausgeben kannst du die dann über
PHP:
echo mysql_fetch_assoc(mysql_query($sql));
bzw. in der allseitsbekannt while schleife.
mfg
 
Zuletzt bearbeitet:
so bekomm ich dass dann schön in eine zeile auch wenn ich bei einem Produkt mehrere Zutaten habe?

ich habe es mal so versucht:

SELECT * FROM produkte, zutaten, prodTOzut
WHERE produkte.produktid = zutaten.zutatenid
AND produkte.produktid = prodTOzut.produktid
AND prodTOzut.zutatenid = zutaten.zutatenid


Das Problem ist nur, dass mein Ergebnis nicht in einer Zeile steht, bzw. ich nicht weiß wie ich es vermeiden kann, dass er bei der php ausgabe den namen des Produkts so oft ausgibt wie produkte vorhanden
 
Zuletzt bearbeitet:
SQL:
SELECT 
pr.name AS prname , pr.preis AS prpreis, zu.preis AS zupreis, zu.name AS zuname
FROM 
`produkte` as pr, `zutaten` as zu
WHERE
ProdTOzut.produktid = pr.id 
AND
ProdTOzut.zutatenid = zu.id
GROUP BY prname
Sollte so in der Art gehen, habs jetzt nicht getestet
 
Irgendwie scheint da was nicht zu klappen...


Ich hab das mal so in phpmyadmin reingegeben...
PHP:
SELECT
produkte.prodname AS prname , produkte.preis AS prpreis, zutaten.preis AS zupreis, zutaten.name AS zuname
FROM
produkte AS pr, zutaten AS zu
WHERE
prodTOzut.produktid = produkt.id
AND
prodTOzut.zutatenid = zu.id
GROUP BY prname


ab der zeile mit dem where steht dann dass er das Feld produkte.prodname nicht finden kann (#1054 - Unknown column 'produkte.prodname' in 'field list' ) kapier ich aber nicht, da es das feld sicher gibt...
 
Laut deiner Angabe der Tabellen im ersten Post, heißt das Feld 'name' und nicht 'prodname'.

War ja auch nur ein Beispiel, wenn ich da die ganze DB-Struktur reinschreib wird das viel und das ist ja auch nicht wirklich notwendig...

Aber von mir aus kann ich euch meine exportierten SQL-Daten reinstellen (wenn es hilft):
SQL:
-- phpMyAdmin SQL Dump
-- version 2.11.9.2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 19. Mai 2009 um 09:28
-- Server Version: 5.0.67
-- PHP-Version: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Datenbank: `pizza`
--

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

--
-- Tabellenstruktur für Tabelle `benutzer`
--

CREATE TABLE IF NOT EXISTS `benutzer` (
  `id` int(4) NOT NULL auto_increment,
  `name` varchar(15) NOT NULL,
  `passwd` varchar(35) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Daten für Tabelle `benutzer`
--

INSERT INTO `benutzer` (`id`, `name`, `passwd`) VALUES
(1, 'pizza', 'f01717dd7a00f8c70a26663066af51fb');

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

--
-- Tabellenstruktur für Tabelle `bestellung`
--

CREATE TABLE IF NOT EXISTS `bestellung` (
  `id` int(15) NOT NULL auto_increment,
  `orderid` int(35) NOT NULL,
  `kundenid` int(35) NOT NULL,
  `produktid` int(35) NOT NULL,
  `prodkatid` int(35) NOT NULL,
  `menge` int(5) NOT NULL,
  `datum` date NOT NULL,
  `status` varchar(35) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Daten für Tabelle `bestellung`
--

INSERT INTO `bestellung` (`id`, `orderid`, `kundenid`, `produktid`, `prodkatid`, `menge`, `datum`, `status`) VALUES
(1, 1, 5, 2, 1, 5, '2009-05-10', 'ausgeliefert'),
(2, 1, 5, 7, 1, 2, '2009-05-10', 'angenommen'),
(3, 1, 5, 7, 1, 2, '2009-05-16', 'eingegangen'),
(4, 1, 5, 7, 1, 2, '2009-04-10', 'angenommen');

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

--
-- Tabellenstruktur für Tabelle `kunde`
--

CREATE TABLE IF NOT EXISTS `kunde` (
  `kundeid` int(35) NOT NULL auto_increment,
  `anrede` varchar(6) NOT NULL,
  `vorname` varchar(35) NOT NULL,
  `nachname` varchar(35) NOT NULL,
  `gebtag` int(2) NOT NULL,
  `gebmonat` varchar(15) NOT NULL,
  `gebjahr` int(4) NOT NULL,
  `adresse` varchar(35) NOT NULL,
  `hausnummer` varchar(35) NOT NULL,
  `stiege` varchar(12) NOT NULL,
  `stock` varchar(10) NOT NULL,
  `tuernr` varchar(10) NOT NULL,
  `plz` varchar(6) NOT NULL,
  `ort` varchar(35) NOT NULL,
  `land` varchar(20) NOT NULL,
  `mail` text NOT NULL,
  `passwd` varchar(35) NOT NULL,
  `salt` varchar(35) NOT NULL,
  `vorwahl` int(10) NOT NULL,
  `nummer` int(20) NOT NULL,
  `durchwahl` int(10) NOT NULL,
  PRIMARY KEY  (`kundeid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=63 ;

--
-- Daten für Tabelle `kunde`
--

INSERT INTO `kunde` (`kundeid`, `anrede`, `vorname`, `nachname`, `gebtag`, `gebmonat`, `gebjahr`, `adresse`, `hausnummer`, `stiege`, `stock`, `tuernr`, `plz`, `ort`, `land`, `mail`, `passwd`, `salt`, `vorwahl`, `nummer`, `durchwahl`) VALUES
(49, 'Herr', 'Daniel ', 'Ferdinand', 10, 'Dezember', 1984, 'Simmeringer Lände', '215', '1', '1', '114', '1234', 'Wien', 'austria', 'danesh@gmx.at', '476a2a4abb96e362baddcfe202ce1d5d', 'salt', 664, 5129513, 0),
(62, 'Firma', 'test', 'test', 0, '-----', 0, 'test', '123', '', '', '', '1234', 'test', 'austria', 'test@test.de', 'a152e841783914146e4bcd4f39100686', 'salt', 0, 1234, 0),
(58, 'Frau', 'Jenny', 'Huandasg', 28, 'Oktober', 1985, 'Baumgasse', '17', '', '2', '14', '1234', 'Innsbruck', 'austria', 'Jenny@yagoo.com', '4e8f794089b6b4ef55cd0399dca1433c', 'salt', 660, 2104274, 0);

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

--
-- Tabellenstruktur für Tabelle `prodTOzut`
--

CREATE TABLE IF NOT EXISTS `prodTOzut` (
  `prodtozutid` int(35) NOT NULL auto_increment,
  `produktid` int(35) NOT NULL,
  `zutatenid` int(35) NOT NULL,
  PRIMARY KEY  (`prodtozutid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=107 ;

--
-- Daten für Tabelle `prodTOzut`
--

INSERT INTO `prodTOzut` (`prodtozutid`, `produktid`, `zutatenid`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 2, 1),
(4, 2, 2),
(5, 2, 3),
(7, 3, 1),
(8, 3, 2),
(9, 3, 5),
(10, 4, 1),
(11, 4, 2),
(12, 4, 4),
(13, 5, 1),
(14, 5, 2),
(15, 5, 6),
(16, 5, 7),
(17, 5, 8),
(18, 6, 1),
(19, 6, 2),
(20, 6, 9),
(21, 7, 1),
(22, 7, 2),
(23, 7, 7),
(24, 7, 25),
(25, 7, 26),
(26, 8, 1),
(27, 8, 2),
(28, 8, 3),
(29, 8, 5),
(30, 8, 6),
(31, 8, 4),
(32, 8, 7),
(33, 9, 1),
(34, 9, 2),
(35, 9, 3),
(36, 9, 5),
(37, 9, 10),
(38, 9, 17),
(39, 9, 26),
(40, 10, 1),
(41, 10, 2),
(42, 10, 3),
(43, 10, 5),
(44, 10, 17),
(45, 11, 1),
(46, 11, 2),
(47, 11, 11),
(48, 11, 18),
(49, 11, 19),
(50, 12, 1),
(51, 12, 2),
(52, 12, 4),
(53, 12, 5),
(54, 12, 6),
(55, 12, 20),
(56, 12, 18),
(57, 12, 24),
(58, 13, 1),
(59, 13, 2),
(60, 13, 5),
(61, 13, 6),
(62, 13, 20),
(63, 13, 18),
(64, 14, 1),
(65, 14, 2),
(66, 14, 5),
(67, 14, 21),
(68, 15, 1),
(69, 15, 12),
(70, 15, 13),
(71, 15, 14),
(72, 15, 15),
(73, 16, 1),
(74, 16, 2),
(75, 16, 16),
(76, 16, 22),
(77, 17, 1),
(78, 17, 2),
(79, 17, 23),
(80, 17, 13),
(81, 17, 7),
(82, 17, 22),
(83, 19, 16),
(84, 20, 6),
(85, 20, 26),
(86, 20, 24),
(87, 21, 9),
(88, 22, 1),
(89, 22, 7),
(90, 22, 6),
(91, 23, 28),
(92, 23, 35),
(93, 24, 29),
(94, 24, 35),
(95, 25, 35),
(96, 25, 29),
(97, 25, 5),
(98, 25, 2),
(99, 26, 30),
(100, 26, 33),
(101, 27, 31),
(102, 27, 33),
(103, 28, 32),
(104, 28, 33),
(105, 29, 3),
(106, 29, 33);

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

--
-- Tabellenstruktur für Tabelle `produkte`
--

CREATE TABLE IF NOT EXISTS `produkte` (
  `produktid` int(35) NOT NULL auto_increment,
  `prodname` varchar(35) NOT NULL,
  `preis` decimal(6,2) NOT NULL,
  `prodkatid` int(35) NOT NULL,
  `katname` varchar(35) NOT NULL,
  PRIMARY KEY  (`produktid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=49 ;

--
-- Daten für Tabelle `produkte`
--

INSERT INTO `produkte` (`produktid`, `prodname`, `preis`, `prodkatid`, `katname`) VALUES
(1, 'Margherita', 5.50, 1, 'pizza'),
(2, 'Funghi', 6.00, 1, 'pizza'),
(3, 'Cardinale', 6.00, 1, 'pizza'),
(4, 'Salami', 7.00, 1, 'pizza'),
(5, 'Diavolo', 7.50, 1, 'pizza'),
(6, 'Tritato di Carni', 6.50, 1, 'pizza'),
(7, 'Al Tonno', 7.50, 1, 'pizza'),
(8, 'Capone', 8.00, 1, 'pizza'),
(9, 'Capricciosa', 8.00, 1, 'pizza'),
(10, 'Quattro Stagioni', 7.50, 1, 'pizza'),
(11, 'Mexicana', 8.00, 1, 'pizza'),
(12, 'Rusticana', 8.00, 1, 'pizza'),
(13, 'Provinciale', 7.50, 1, 'pizza'),
(14, 'Hawaii', 7.50, 1, 'pizza'),
(15, 'Quattro Formaggi', 7.50, 1, 'pizza'),
(16, 'Frutti di Mare', 8.50, 1, 'pizza'),
(17, 'Spinaci', 7.50, 1, 'pizza'),
(19, 'Spaghtetti - Frutti di Mare', 7.50, 2, 'pasta'),
(20, 'Spaghtetti - Carbonara', 7.00, 2, 'pasta'),
(21, 'Spaghtetti - Bolognese', 6.00, 2, 'pasta'),
(22, 'Spaghtetti - Amatriciana', 7.00, 2, 'pasta'),
(23, 'Wiener Schnitzel', 8.00, 3, 'gebackenes'),
(24, 'Putenschnitzel', 8.50, 3, 'gebackenes'),
(25, 'Puten Cordon bleu', 9.00, 3, 'gebackenes'),
(26, 'Gebackenes Gemüse', 6.00, 3, 'gebackenes'),
(27, 'Gebackene Zucchini', 6.00, 3, 'gebackenes'),
(28, 'Gebackene Melanzani', 6.00, 3, 'gebackenes'),
(29, 'Gebackene Champignons', 6.50, 3, 'gebackenes'),
(30, 'Kartoffelsalat', 3.00, 4, 'salat'),
(31, 'Tomatensalat', 3.00, 4, 'salat'),
(32, 'Gemischter Salat', 3.50, 4, 'salat'),
(33, 'Schinken-Eier-Salat', 5.50, 4, 'salat'),
(34, 'Schafskäsesalat', 5.50, 4, 'salat'),
(35, 'Putenstreifensalat', 5.50, 4, 'salat'),
(36, 'Thunfisch-Eier-Salat', 5.50, 4, 'salat'),
(37, 'Palatschinken mit Schokonuss', 3.50, 5, 'desserts'),
(38, 'Palatschinken mit Marmelade', 3.50, 5, 'desserts'),
(39, 'Tiramisu', 3.50, 5, 'desserts'),
(40, 'Mohr im Hemd', 3.50, 5, 'desserts'),
(41, 'Cola (0,5 l PET-Flasche)', 1.50, 6, 'getränke'),
(42, 'Sprite (0,5 l PET-Flasche)', 1.50, 6, 'getränke'),
(43, 'Fanta (0,5 l PET-Flasche)', 1.50, 6, 'getränke'),
(44, 'Mineral (0,5 l PET-Flasche)', 1.00, 6, 'getränke'),
(45, 'Eistee (0,5 l PET-Flasche)', 1.50, 6, 'getränke'),
(46, 'Bier (0,5 l Flasche)', 2.00, 6, 'getränke'),
(47, 'Grüner Vetliner (0,75  l Flasche)', 6.00, 6, 'getränke'),
(48, 'Blaufränkisch (0,75  l Flasche)', 6.00, 6, 'getränke');

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

--
-- Tabellenstruktur für Tabelle `zutaten`
--

CREATE TABLE IF NOT EXISTS `zutaten` (
  `zutatenid` int(35) NOT NULL auto_increment,
  `zutatenname` varchar(35) NOT NULL,
  `preis` decimal(4,2) NOT NULL,
  PRIMARY KEY  (`zutatenid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=38 ;

--
-- Daten für Tabelle `zutaten`
--

INSERT INTO `zutaten` (`zutatenid`, `zutatenname`, `preis`) VALUES
(1, 'Tomaten', 0.30),
(2, 'Käse', 0.50),
(3, 'Champignons', 0.30),
(4, 'Salami', 0.50),
(5, 'Schinken', 0.50),
(6, 'Speck', 0.50),
(7, 'Zwiebel', 0.30),
(8, 'scharfe Pfefferoni', 0.30),
(9, 'Fleischsauce', 0.50),
(10, 'Sardellen', 0.50),
(11, 'Putenstreifen', 0.50),
(12, 'Edamer', 0.50),
(13, 'Schafkäse', 0.50),
(14, 'Gorgonzola', 0.50),
(15, 'Mozzarella', 0.50),
(16, 'Meeresfrüchte', 0.50),
(17, 'Artischocken', 0.30),
(18, 'Mais', 0.30),
(19, 'Paprika', 0.30),
(20, 'Pfefferoni', 0.30),
(21, 'Ananas', 0.30),
(22, 'Knoblauch', 0.30),
(23, 'Spinat', 0.30),
(24, 'Ei', 0.30),
(25, 'Thunfisch', 0.50),
(26, 'Oliven', 0.30),
(27, 'Obers', 0.30),
(28, 'Schweinefleisch', 0.50),
(29, 'Putenfleisch', 0.50),
(30, 'Gemüse', 0.30),
(31, 'Zucchini', 0.30),
(32, 'Melanzani', 0.30),
(33, 'Sauce Tartare', 0.30),
(34, 'Ketchup', 0.30),
(35, 'Pommes Frites', 2.50),
(36, 'Backkartoffeln', 2.50),
(37, 'Reis', 2.00);
 
Zuletzt bearbeitet von einem Moderator:
Du wweißt aber schon das Du gerade die ganzen E-Mailadresse und Namen von deinen Kunden hier veröffentlicht hast.....

Ich glaube damit wären sie nicht einverstanden.....
 
Hi,

wenn Du Aliase für die Tabellen vergibst, musst Du die auch benutzen.
Und aus der Tabelle prodTOzut wählst Du gar nicht aus. Wie soll daraus eine Spalte in der WHERE-Klausel verwendet werden, wenn die Tabelle gar nicht gejoint wird?
An anderen Stellen verwendest Du Spalten- und auch Tabellennamen, die tatsächlich nicht existieren.
Behebe also erstmal die ganzen Fehler in der Abfrage.

LG
 
Zurück