Kreuztabelle

LarryKante

Grünschnabel
Hi,
Ich hab ein problem mit der korrekten Darstellung(also so wie ich es eigentlich haben möchte ^^) meiner Kreuztabelle...

Folgende Situation:

Ich besitze 2 tabellen in einer Datenbank (phpMyAdmin auf einem Server) um artikel zu verwalten:
Die erste Tabelle ist die Artikel Tabelle. Darin stehen die wichtigsten Information über jeden einzelnen Artikel. Jeder Artikel gehört einer Artikelgruppe an und besitzt eine eigene ArtikelID und ist unterteilt in Farben grössen.
D.h. ich arbeite in 3 Dimensionen: Gruppe, Grösse, Farbe.
artikel.jpg

Die zweite Tabelle ist die Auftragsposition Tabelle. Darin werden die Gruppe, die ID, Name, und zu einem Eintrag zusammengefasst die Farbe und Grösse (das muss auch so bleiben!) sowie die Menge erfasst.
artik_pos.JPG

Der code für die Artikeltabelle:
Code:
-- 
-- Tabellenstruktur für Tabelle `artik_pos`
-- 

CREATE TABLE `artik_pos` (
  `id` int(10) NOT NULL auto_increment,
  `artnr` varchar(255) NOT NULL default '',
  `artid` varchar(255) NOT NULL default '',
  `bez1` varchar(255) NOT NULL default '',
  `bez2` varchar(255) NOT NULL default '',
  `look` varchar(255) NOT NULL default '',
  `menge` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 ;

-- 
-- Daten für Tabelle `artik_pos`
-- 

INSERT INTO `artik_pos` VALUES (1, 'E07664', 'bbb-aaa-111', 'Anouch', 'noir, T1', '133', '2');
INSERT INTO `artik_pos` VALUES (2, 'E07664', 'bbb-aaa-222', 'Anouch', 'noir, T2', '133', '1');
INSERT INTO `artik_pos` VALUES (3, 'E07221', 'aaa-bbb-111', 'Manou', 'blanc, 32', '122', '2');
INSERT INTO `artik_pos` VALUES (4, 'E07222', 'aaa-bbb-222', 'Mandy', 'blanc, 34', '110', '2');
INSERT INTO `artik_pos` VALUES (5, 'E07222', 'aaa-ccc-111', 'Mandy', 'ficelle, 34', '110', '1');

Der code für die Auftragspositionstabelle:
Code:
-- 
-- Tabellenstruktur für Tabelle `artik_pos`
-- 

CREATE TABLE `artik_pos` (
  `id` int(10) NOT NULL auto_increment,
  `artnr` varchar(255) NOT NULL default '',
  `artid` varchar(255) NOT NULL default '',
  `bez1` varchar(255) NOT NULL default '',
  `bez2` varchar(255) NOT NULL default '',
  `look` varchar(255) NOT NULL default '',
  `menge` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 ;

-- 
-- Daten für Tabelle `artik_pos`
-- 

INSERT INTO `artik_pos` VALUES (1, 'E07664', 'bbb-aaa-111', 'Anouch', 'noir, T1', '133', '2');
INSERT INTO `artik_pos` VALUES (2, 'E07664', 'bbb-aaa-222', 'Anouch', 'noir, T2', '133', '1');
INSERT INTO `artik_pos` VALUES (3, 'E07221', 'aaa-bbb-111', 'Manou', 'blanc, 32', '122', '2');
INSERT INTO `artik_pos` VALUES (4, 'E07222', 'aaa-bbb-222', 'Mandy', 'blanc, 34', '110', '2');
INSERT INTO `artik_pos` VALUES (5, 'E07222', 'aaa-ccc-111', 'Mandy', 'ficelle, 34', '110', '1');

Folgendermaßen frage ich nun meine Tabelle ab:
PHP:
SELECT artik_pos.bez1, artikel.bez2, 
(SELECT COUNT(artik_pos.menge) FROM artik_pos WHERE artikel.groesse = "32") AS Gr32,
(SELECT COUNT(artik_pos.menge) FROM artik_pos WHERE artikel.groesse = "34") AS Gr34, 
(SELECT COUNT(artik_pos.menge) FROM artik_pos WHERE artikel.groesse = "38") AS Gr38, 
(SELECT COUNT(artik_pos.menge) FROM artik_pos WHERE artikel.groesse = "42") AS Gr42,  
(SELECT COUNT(artik_pos.menge) FROM artik_pos WHERE artikel.groesse = "T2") AS T2,
(SELECT COUNT(artik_pos.menge) FROM artik_pos WHERE artikel.groesse = "T1") AS T1
FROM artik_pos
LEFT JOIN artikel ON artikel.artid = artik_pos.artid
GROUP BY artik_pos.artid ORDER BY artik_pos.bez1

Folgende Tabelle wird ausgegeben
abfr.jpg

Nun das Problem: Wie Ihr seht kommt überall wo die Menge steht eine 5 heraus :confused: . Ich weis nur nicht welche abfrage ich nutzen kann um den realen Wert aus der artik_pos zu bekommen. SUM(artik_pos.menge) ergibt eine 8 was logischerweise zusammengerechnet der Wert aller Mengen in der artik_pos ist. Verwende ich jedoch nur artik_pos.menge wird ein Syntax Error ausgegeben...

Ich weis nun echt nich mehr weiter. Hab schon gesucht aber nix passendes gefunden...

Hab schnell doch nochmal gesucht und etwas gefunden in einem anderem Thread!
Dort hatte einer fast das gleiche Problem. Er löste es mir dem distinct befehl.
Das hab ich auch gleich probiert!
PHP:
(SELECT COUNT(distinct artik_pos.menge) FROM artik_pos WHERE artikel.groesse = "T1") AS T1,
(SELECT COUNT(distinct artik_pos.menge) FROM artik_pos WHERE artikel.groesse = "T2") AS T2,
//usw...
Jetzt bekomm ich überall eine 2 heraus! Das liegt daran, dass der höchste Wert in der Spalte menge in der Tabelle artik_pos eine 2 ist. Ist es eine 3 kommt überall 3 heraus. Muss ich die einzelnen Mengen abfragen evtl. als Array deklarieren und jedes mit eigener Id speichern?

Welche Möglichkeit besteht?

Kann mir bitte jemand weiterhelfen!
 
Und was möchtes du erreichen ?

was soll denn gezählt werden - das habe ich noch nicht verstanden :-(
 
Die menge aus der artik_pos soll entsprechend der grössen in der senkrechten, und die farben in der waagerechten geordnet werden! in den entsprechenden Zellen soll nun die menge eingetragen werden, die dem artikel entsprechen!

da die grösse und die farbe aber zusammen in einer spalte stehen, lässt sich eine kreuztabelle nicht vermeiden!

In der der artikel tabelle sind diese angaben getrennt eingetragen.

Die ausgabe soll halt so wie hier aussehen
abfrageneu.JPG
nur halt die mengenangabe stimmt nicht!
 
Zurück