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 ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken 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 02.03.2009, 15:09:21
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
min() max() und andere spalten

Hi

ich habe ein Problem mit einer min()/max() abfrage bei der ich alle Spaltenwerte brauche
und mir Mysql zwar den richtigen min()/max() anzeigt aber die werte der anderen Spalten
vom ersten Eintrag übernimmt.

Kurzer Überblick:

Tabelle: Artikel+inhalt
Code:
CREATE TABLE IF NOT EXISTS `artikel` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
)
INSERT INTO `artikel` (`id`, `name`) VALUES (1, 'Handy');
Tabelle_ Liste+Inhalt
Code:
CREATE TABLE IF NOT EXISTS `liste` (
  `id` int(11) NOT NULL auto_increment,
  `aid` int(11) NOT NULL,
  `anzahl` int(11) NOT NULL,
  `preis` decimal(10,2) NOT NULL,
  PRIMARY KEY  (`id`)
)

INSERT INTO `liste` (`id`, `aid`, `anzahl`, `preis`) VALUES
(1, 1, 1, 1.00),
(2, 1, 2, 2.00);
Nun versuche ich mit folgender Select abfrage
Code:
SELECT a.name,b.anzahl,max(b.preis) as preis FROM artikel as a 
inner join liste as b 
on b.aid=a.id group by a.name
folgendes zu erreichen
name anzahl preis
Handy 2 2.00

Ausgabe ist aber
name anzahl preis
Handy 1 2.00

Wie ihr seht übernimmt er die "anzahl" vom ersten Eintrag in der DB
und nicht von dem max(preis).

Ich weis das min()/max() wie ein subquery zu verstehen sind und das Ergebnis
so angefragt auch richtig beantwortet wird. Nur hänge ich an der Lösung ohne
eine weitere abfrage nach der richtigen anzahl zu machen.
Jemand ne idee?
Mit Zitat antworten
  #2  
Alt 02.03.2009, 17:01:19
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
AW: min() max() und andere spalten

Mit einer jetzigen Query verbindest Du nur die jeweiligen IDs der beiden Tabellen um dann mit MAX() den jeweilig höchsten Preis dieses Ergebnisses abzufragen. Die anderen Spalten bleiben dadurch natürlich unberührt.

Was du brauchst, ist die jeweilig höchste Reihe pro Gruppe. Das geht dann z.B. so:

Code:
SELECT a.name
     , b.anzahl
     , b.preis
  FROM artikel AS a 
INNER
  JOIN liste AS b 
    ON b.aid = a.id
   AND b.preis = (SELECT MAX(preis) 
                    FROM liste 
                   WHERE aid = a.id)
GROUP
    BY a.name
(Mit Subqery)

Code:
SELECT a.name
     , b1.anzahl
     , b1.preis
  FROM artikel AS a 
INNER
  JOIN liste AS b1
    ON b1.aid = a.id
LEFT OUTER
  JOIN liste AS b2
    ON b1.aid = a.id
   AND b2.preis > b1.preis
 WHERE b2.preis IS NULL
GROUP
    BY a.name
(Ohne Subquery)
Mit Zitat antworten
  #3  
Alt 02.03.2009, 21:19:47
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: min() max() und andere spalten

Deine erste Lösung lässt sich tadellos übernehmen und funktioniert zu 100% in meiner doch etwas komplexeren Umgebung. ;)

Die 2te ist verständlich nur ist sie a) langsamer und ich kann sie b) nicht auf meine gebrauchte Umgebung anwenden.

Denke die erste ist auch für nachfolgende die das selbe Problem haben ausreichend vielen Dank dafür.

Mfg
Mit Zitat antworten
  #4  
Alt 03.03.2009, 08:46:05
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
AW: min() max() und andere spalten

Hm, eigentlich sollte die zweite Abfrage kein bisschen langsamer sein - eher sogar minimal schneller.
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
Groß- und Kleinschreibung bei Tabellen und Spalten KartoffelKiffer MySQLi/PDO/(MySQL) 11 10.07.2008 13:48:53
Problem mit php 3 Spalten Layout 007Rene HTML, CSS und JavaScript Help! 1 01.03.2007 13:44:26
Eine Tabelle 3 Spalten ohne primary key Franzx MySQLi/PDO/(MySQL) 1 30.05.2006 21:55:37
SQL-Abfrage: Mehrere Spalten als ein "String" betrachten? jeanpascal PHP Grundlagen 6 28.12.2005 19:17:28
93 Spalten oder 31 Zeilen? DJTonic PHP für Fortgeschrittene und Experten 1 05.02.2004 08:25:05


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:46:27 Uhr.


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


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