php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.02.2012, 19:14  
Neuer Benutzer
 
Registriert seit: 24.05.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Jahnze befindet sich auf einem aufstrebenden Ast
Standard Select Problem die zweite

Hallo werte Forengemeinde,
mir wurde vor kurzem hier schon einmal geholfen, mein Problem war einen Maximalwert inklusive betreffenden Datums zu ermitteln.

Meine Code lautete damals:
Code:
$sql_max ="SELECT 
    MAX(paketzahl) AS paketzahl_max 
    FROM 
    pakete 
    WHERE 
    datum  BETWEEN '2012-01-20' AND '2012-01-31' ";
akretschmar brachte mich auf folgendes:

Code:
select datum, paketzahl from pakete where datum ... order by paketzahl desc limit 1.
funktioniert auch wunderbar. Wenn ich aber nicht nur die paketzahl, sondern auch die maximale katalogzahl, tringeldzahl, retourenzahl haben möchte, muss ich dann für jede Abfrage eine eigene Select Anweisung erstellen? Wenn ich alles in einem "Rutsch" mache, klappt es nicht, wie ich es gerne hätte.

Mein Versuch:

Code:
select datum, paketzahl,katalogzahl,trinkgeld from pakete where datum ... order by paketzahl desc limit 1
Als einfacher Hermes Zusteller habe ich das ganz schön schwer, PHP und MYSQL zu begreifen, aber es wird schon immer besser

Vielen Dank für einen eventuellen Hinweis, wo ich fündig werden könnte,
Andreas Jahnsmüller
Jahnze ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.02.2012, 19:48  
Erfahrener Benutzer
 
Registriert seit: 13.01.2012
Beiträge: 256
PHP-Kenntnisse:
Anfänger
akretschmer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Jahnze Beitrag anzeigen
Hallo werte Forengemeinde,
mir wurde vor kurzem hier schon einmal geholfen, mein Problem war einen Maximalwert inklusive betreffenden Datums zu ermitteln.

Meine Code lautete damals:
Code:
$sql_max ="SELECT 
    MAX(paketzahl) AS paketzahl_max 
    FROM 
    pakete 
    WHERE 
    datum  BETWEEN '2012-01-20' AND '2012-01-31' ";
akretschmar brachte mich auf folgendes:

Code:
select datum, paketzahl from pakete where datum ... order by paketzahl desc limit 1.
funktioniert auch wunderbar. Wenn ich aber nicht nur die paketzahl, sondern auch die maximale katalogzahl, tringeldzahl, retourenzahl haben möchte, muss ich dann für jede Abfrage eine eigene Select Anweisung erstellen? Wenn ich alles in einem "Rutsch" mache, klappt es nicht, wie ich es gerne hätte.

Mein Versuch:

Code:
select datum, paketzahl,katalogzahl,trinkgeld from pakete where datum ... order by paketzahl desc limit 1
Als einfacher Hermes Zusteller habe ich das ganz schön schwer, PHP und MYSQL zu begreifen, aber es wird schon immer besser

Vielen Dank für einen eventuellen Hinweis, wo ich fündig werden könnte,
Andreas Jahnsmüller
Also, die maximale Anzahl Pakete kann ja sicher an einem anderen Tag sein als der, wo das Trinkgeld üppig war, oder? Also brauchst quasi mehrere Abfragen. Kurze Demo eines UNION:

Code:
test=*# create table pakete (datum date, pakete int, kataloge int, trinkgeld numeric(8,2));
CREATE TABLE
test=*# insert into pakete select current_date + s * '1day'::interval, (random()*100)::int, (random()*100)::int, random()*100 from generate_series(10,100)s;
INSERT 0 91
test=*# select * from pakete limit 10;
   datum    | pakete | kataloge | trinkgeld
------------+--------+----------+-----------
 2012-02-11 |     97 |        6 |     47.47
 2012-02-12 |     13 |       43 |     65.47
 2012-02-13 |     25 |       66 |     48.95
 2012-02-14 |     83 |       67 |      7.89
 2012-02-15 |     20 |       39 |     52.85
 2012-02-16 |     77 |       65 |     98.71
 2012-02-17 |     74 |       48 |     59.26
 2012-02-18 |     85 |       37 |     65.98
 2012-02-19 |      7 |       61 |     52.78
 2012-02-20 |     32 |       71 |     83.07
(10 rows)

test=*# (select 'Pakete' as "was", datum, pakete from pakete order by pakete desc limit 1) union (select 'Kataloge', datum, kataloge from pakete order by kataloge desc limit 1) union (select 'Trinkgeld', datum, trinkgeld from pakete order by trinkgeld desc limit 1);
    was    |   datum    | pakete
-----------+------------+--------
 Pakete    | 2012-03-17 |     99
 Trinkgeld | 2012-02-16 |  98.71
 Kataloge  | 2012-03-06 |    100
(3 rows)
Ist es das, was Du suchst?


Andreas
akretschmer ist offline   Mit Zitat antworten
Alt 01.02.2012, 20:33  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 681
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

oder

PHP-Code:
SELECT
(SELECT MAX(paketzahlFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31' ) as max_paketzahl,
(
SELECT MAX(trinkgeldFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31' ) as max_trinkgeld,
(
SELECT MAX(katalogeFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31' ) as max_kataloge
FROM pakete LIMIT 1 
Harry_X ist offline   Mit Zitat antworten
Alt 01.02.2012, 20:43  
Erfahrener Benutzer
 
Registriert seit: 13.01.2012
Beiträge: 256
PHP-Kenntnisse:
Anfänger
akretschmer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Harry_X Beitrag anzeigen
oder

PHP-Code:
SELECT
(SELECT MAX(paketzahlFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31' ) as max_paketzahl,
(
SELECT MAX(trinkgeldFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31' ) as max_trinkgeld,
(
SELECT MAX(katalogeFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31' ) as max_kataloge
FROM pakete LIMIT 1 
Nein


Andreas
akretschmer ist offline   Mit Zitat antworten
Alt 01.02.2012, 20:58  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 681
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

ach ja, er will das zugehörige Datum haben:

PHP-Code:
SELECT
(SELECT paketzahl FROM pakete WHERE paketzahl = (SELECT MAX(paketzahlFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_paketzahl,
(
SELECT datum FROM pakete WHERE paketzahl = (SELECT MAX(paketzahlFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_paketzahldatum
SELECT
(SELECT trinkgeld FROM pakete WHERE trinkgeld = (SELECT MAX(trinkgeldFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_trinkgeld,
(
SELECT datum FROM pakete WHERE trinkgeld = (SELECT MAX(trinkgeldFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_trinkgelddatum
SELECT
(SELECT kataloge FROM pakete WHERE kataloge = (SELECT MAX(katalogeFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_katalogezahl,
(
SELECT datum FROM pakete WHERE kataloge = (SELECT MAX(katalogeFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_katalogedatum 
FROM pakete LIMIT 1 
jetzt hat er alles in einer Reihe, lol
Harry_X ist offline   Mit Zitat antworten
Alt 01.02.2012, 21:37  
Erfahrener Benutzer
 
Registriert seit: 13.01.2012
Beiträge: 256
PHP-Kenntnisse:
Anfänger
akretschmer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Harry_X Beitrag anzeigen
ach ja, er will das zugehörige Datum haben:

PHP-Code:
SELECT
(SELECT paketzahl FROM pakete WHERE paketzahl = (SELECT MAX(paketzahlFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_paketzahl,
(
SELECT datum FROM pakete WHERE paketzahl = (SELECT MAX(paketzahlFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_paketzahldatum
SELECT
(SELECT trinkgeld FROM pakete WHERE trinkgeld = (SELECT MAX(trinkgeldFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_trinkgeld,
(
SELECT datum FROM pakete WHERE trinkgeld = (SELECT MAX(trinkgeldFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_trinkgelddatum
SELECT
(SELECT kataloge FROM pakete WHERE kataloge = (SELECT MAX(katalogeFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_katalogezahl,
(
SELECT datum FROM pakete WHERE kataloge = (SELECT MAX(katalogeFROM pakete WHERE datum  BETWEEN '2012-01-20' AND '2012-01-31') AND datum  BETWEEN '2012-01-20' AND '2012-01-31' LIMIT 1) as max_katalogedatum 
FROM pakete LIMIT 1 
jetzt hat er alles in einer Reihe, lol
kürzer:

Code:
test=*# select p1.datum, foo.pakete, p2.datum, foo.kataloge, p3.datum, foo.trinkgeld from (select max(pakete) as pakete, max(kataloge) as kataloge, max(trinkgeld) as trinkgeld from pakete) foo left join pakete p1 on foo.pakete=p1.pakete left join pakete p2 on foo.kataloge=p2.kataloge left join pakete p3 on foo.trinkgeld=p3.trinkgeld;
   datum    | pakete |   datum    | kataloge |   datum    | trinkgeld
------------+--------+------------+----------+------------+-----------
 2012-03-17 |     99 | 2012-03-06 |      100 | 2012-02-16 |     98.71
(1 row)
Andreas
akretschmer ist offline   Mit Zitat antworten
Alt 01.02.2012, 21:44  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 681
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von akretschmer Beitrag anzeigen
kürzer:

Code:
test=*# select p1.datum, foo.pakete, p2.datum, foo.kataloge, p3.datum, foo.trinkgeld from (select max(pakete) as pakete, max(kataloge) as kataloge, max(trinkgeld) as trinkgeld from pakete) foo left join pakete p1 on foo.pakete=p1.pakete left join pakete p2 on foo.kataloge=p2.kataloge left join pakete p3 on foo.trinkgeld=p3.trinkgeld;
   datum    | pakete |   datum    | kataloge |   datum    | trinkgeld
------------+--------+------------+----------+------------+-----------
 2012-03-17 |     99 | 2012-03-06 |      100 | 2012-02-16 |     98.71
(1 row)
Andreas
fehlt da nicht irgendwo die Datumseinschränkung? Und ich meine auch zu glauben, daß die Ergebnismenge mehr als 1 Satz zurückgibt, falls es irgendwo ein uneindeutiges Maximum gibt..
Harry_X ist offline   Mit Zitat antworten
Alt 01.02.2012, 21:54  
Erfahrener Benutzer
 
Registriert seit: 13.01.2012
Beiträge: 256
PHP-Kenntnisse:
Anfänger
akretschmer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Harry_X Beitrag anzeigen
fehlt da nicht irgendwo die Datumseinschränkung? Und ich meine auch zu glauben, daß die Ergebnismenge mehr als 1 Satz zurückgibt, falls es irgendwo ein uneindeutiges Maximum gibt..
Ähm, ja. Die Datumsbeschränkung, dafür war ich zu faul, und ja, bei uneindeutigen Max-Werten gibt es mehrere Datensätze. Also noch ein LIMIT 1 dran

Andreas
akretschmer ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Problem mit select Falke07 PHP Einsteiger 2 15.02.2011 11:18
[Erledigt] Intertabellarische Berechnungen, wie? dave303 Datenbanken 13 05.03.2010 11:58
Race Condition Problem (INSERT -> SELECT) R4v3r Datenbanken 5 11.08.2009 12:58
[Erledigt] Problem mit SELECT Abfrage BlackBroom Datenbanken 4 28.05.2009 14:13
<div> Tag select() Problem sharp JavaScript, Ajax und mehr 13 19.09.2008 00:23
Problem mit SELECT IF r-ene Datenbanken 2 07.02.2008 10:22
Mysql SELECT Abfrage -- Problem mit LIMIT djrace Datenbanken 2 01.05.2006 12:58
Problem beim Auswerten eines select Feldes FireFIghter PHP Tipps 2006 3 23.04.2006 15:28
SELECT problem Fatal Error PHP Tipps 2006 5 21.04.2006 16:31
Problem mit select (AND, OR und Like gemixt) pixelcut Datenbanken 3 11.05.2005 10:14
[Erledigt] SELECT Problem PHP Tipps 2005 6 08.03.2005 21:10
[Erledigt] SELECT ... LIKE Problem Datenbanken 10 05.03.2005 13:21
mysql SELECT problem yoshy Datenbanken 7 20.02.2005 00:46
[Erledigt] Select &amp;amp;amp; Update Syntax Problem! Datenbanken 3 14.12.2004 18:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
left join on intervall-zugehörigkeit, select probleme mit datum

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:58 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum