Hallo zusammen,
ich habe ein grundsätzliches Problem über das ich immer wieder stolpere und welches ich jedesmal ziemlich umständlich per PHP löse. Da dies aber oftmals mit mehreren Querys und somit schlechter Performance verbunden ist frage ich mich ob das nicht auch mit SQL-Statements direkt lösbar ist.
Es gibt zwei Tabellen. Eine mit Ländercodes und eine zweite mit beliebigen Werten (times).
Code:
-- ----------------------------
-- Table structure for countries
-- ----------------------------
CREATE TABLE `countries` (
`CountryID` int(10) NOT NULL auto_increment,
`CountryCode` varchar(10) collate latin1_general_ci default NULL,
PRIMARY KEY (`CountryID`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `countries` VALUES ('1', 'GER');
INSERT INTO `countries` VALUES ('2', 'GHA');
INSERT INTO `countries` VALUES ('3', 'GIB');
INSERT INTO `countries` VALUES ('4', 'GRE');
INSERT INTO `countries` VALUES ('5', 'GRN');
INSERT INTO `countries` VALUES ('6', 'GUA');
INSERT INTO `countries` VALUES ('7', 'GUE');
INSERT INTO `countries` VALUES ('8', 'GUI');
INSERT INTO `countries` VALUES ('9', 'GUM');
INSERT INTO `countries` VALUES ('10', 'GUY');
-- ----------------------------
-- Table structure for times
-- ----------------------------
CREATE TABLE `times` (
`TimeID` int(10) NOT NULL auto_increment,
`CountryID` int(10) default NULL,
`Time` varchar(10) collate latin1_general_ci default NULL,
PRIMARY KEY (`TimeID`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `times` VALUES ('1', '1', '10');
INSERT INTO `times` VALUES ('2', '1', '11');
INSERT INTO `times` VALUES ('3', '1', '12');
INSERT INTO `times` VALUES ('4', '1', '13');
INSERT INTO `times` VALUES ('5', '2', '10');
INSERT INTO `times` VALUES ('6', '2', '11');
INSERT INTO `times` VALUES ('7', '2', '12');
INSERT INTO `times` VALUES ('8', '3', '10');
INSERT INTO `times` VALUES ('9', '4', '12');
INSERT INTO `times` VALUES ('10', '4', '13');
INSERT INTO `times` VALUES ('11', '4', '14');
INSERT INTO `times` VALUES ('12', '4', '15');
Die beiden Tabellen sind über die CountryID verknüpft.
Jetzt sollen für jedes Land die zwei kleinsten Werte (times) angezeigt werden und das ganze sortiert werden (nach times DESC).
PHP-Lösung:
Mit PHP hole ich mir jetzt alle vorhanden CountryCodes und baue mir eine riesige UNION-Query wo jedes Union die beiden besten Zeiten holt und sortiere das gesamte ergebnis nocheinmal.
MySQL-Lösung:
k.A. - wer hat eine Idee für mich?
Viele Grüße
Frank