SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 13.05.2008, 18:08:57
frank2342 frank2342 ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 3
Die zwei besten Werte pro Land

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
Mit Zitat antworten
  #2  
Alt 13.05.2008, 23:24:33
Franzx Franzx ist offline
Junior Member
 
Registriert seit: Nov 2005
Ort: Bremen
Beiträge: 437
AW: Die zwei besten Werte pro Land

Moin Frank2342 und herzlich Willkommen im Forum!

Die Tabellen verbinden kannst Du mit
PHP-Code:
INNER JOIN 
Also
PHP-Code:
SELECT FROM countries INNER JOIN times ON countries.CountryCode times.CountryCode ... 
Die Bedingung errreichst Du mit:
PHP-Code:
... ORDER BY Time DESC LIMIT 2 
Somit am Stück:
PHP-Code:
SELECT FROM countries INNER JOIN times ON countries.CountryCode times.CountryCode ORDER BY Time DESC LIMIT 2 
Grüße, Franz
__________________
Für die richtige Frage gibt's die richtige Antwort!
Mit Zitat antworten
  #3  
Alt 14.05.2008, 15:10:56
frank2342 frank2342 ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 3
AW: Die zwei besten Werte pro Land

Hallo Franzx,

vielen Dank für Deine Antwort. Leider ist das noch nicht das was ich brauche. Das wäre auch etwas zu einfach. Ich habe mich aber bestimmt zu umständlich ausgedrückt. Ist gar nicht so einfach ein Problem zu schildern ohne gleich eine ganzen Roman zu verfassen. Was ich suche ist sowas wie:

Code:
SELECT
  countries.CountryCode,
  Min(times.`Time`)
FROM
  times
  Inner Join countries ON countries.CountryID = times.CountryID
GROUP BY
  countries.CountryCode
Nur das mir nicht eine Zeit pro Land angezeigt wird, sondern die zwei besten pro Land.

sonnige Grüße
Frank
Mit Zitat antworten
  #4  
Alt 14.05.2008, 17:18:36
Benutzerbild von Indyk
Indyk Indyk ist offline
Member
 
Registriert seit: Aug 2006
Ort: Lübeck
Alter: 37
Beiträge: 900
Indyk eine Nachricht über ICQ schicken
AW: Die zwei besten Werte pro Land

Lass das MIN doch einfach MIN sein ( ;
Sowas macht man mit TOP 2 oder LIMIT 0, 2 (je nachdem mssql oder mysql) und nem ORDER BY DESC / ASC auf times
Mit Zitat antworten
  #5  
Alt 14.05.2008, 17:30:44
frank2342 frank2342 ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 3
AW: Die zwei besten Werte pro Land

Zitat:
Zitat von Indyk Beitrag anzeigen
Lass das MIN doch einfach MIN sein ( ;
Sowas macht man mit TOP 2 oder LIMIT 0, 2 (je nachdem mssql oder mysql) und nem ORDER BY DESC / ASC auf times
Kannst Du das näher erklären? Mit Limit 0, 2 bekomme ich ja immer nur die beiden besten Zeiten aus einem Land. Ich brauche aber eine Liste mit allen Ländern und den jeweils besten 2 Zeiten. Also jedes Land darf in der Liste nur max. 2 mal vorkommen.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
nur ungleiche werte im array Mortz PHP Grundlagen 3 30.04.2008 19:39:38
UPDATE mehreren Zeilen unterschiedliche Werte Multipar MySQLi/PDO/(MySQL) 6 19.04.2008 16:35:14
PHP Formular Werte Temp. speichern pix PHP für Fortgeschrittene und Experten 1 11.04.2007 00:01:23
Array Werte vergleichen ghostface PHP Grundlagen 4 20.09.2006 10:02:16
post werte an frames weitergeben Stifler HTML, CSS und JavaScript Help! 3 18.12.2004 19:57:20


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:48:46 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt