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 25.01.2015, 11:26:05
hng84 hng84 ist offline
Anfänger
 
Registriert seit: Jan 2015
Alter: 39
Beiträge: 1
Hilfe bei einer Abfrage mit vielen CROSS JOINS, SUM(MAX())

Hallo,

ich beiße mir im Moment die Zähne an einer Abfrage aus oder steh einfach aufm Schlauch....oder beides.

Folgendes:

Ich habe eine Tabelle (vereinfacht):
Code:
id, titel, titel_id, ext_id, ext_wert, wert
1, Test 1, T_11, 11_3, 3.99, 8.99
2, Titel 1, T_11, 21_3, 2.99, 9.99
3, Test Titel 1, T_11, 31_3, 3.49, 10.99
4, Test 2, T_21, 11_3, 4.29, 7.99
5, Titel 2, T_21, 41_4, 3.99, 9.99
6, Titel 3, T_31, 31_3, 2.99, 8.99
Auf der Seite können beliebig viele Titel ausgewählt werden, daraufhin sollen die 5 Kombinationen angezeigt werden in denen die Summe von Wert + je ext_id der Höchste ext_wert summiert am geringsten ist.
Folgende Ausgabe wäre korrekt:
Code:
a_id, a_titel, a_ext_id, a_ext_wert, a_wert, b_id, b_titel, b_ext_id, b_ext_wert, b_wert, ges_wert
1, Test 1, T_11, 11_3, 3.99, 8.99, 4, Test 2, T_21, 11_3, 4.29, 7.99, 21.27
2, Titel 1, T_11, 21_3, 2.99, 9.99, 5, Titel 2, T_21, 41_4, 3.99, 9.99, 25.26
3, Test Titel 1, T_11, 31_3, 3.49, 10.99, 4, Test 2, T_21, 11_3, 4.29, 7.99, 26,76
Usw…
Mein Problem dabei ist die MAX werte von ext_wert nach ext_id Gruppiert zu Summieren.

Bisher habe ich diesen Teil per PHP gelöst, da war meine Test DB aber auch noch sehr klein (ca. 100 Datensätze) ich rechne mit mehreren 100.000 Datensätzen und habe die DB deshalb vor kurzem aufgebläht auf ca. 65.000 Datensätze.

Da ich die Kombinationen mit einer Variablen Anzahl CROSS JOINS gelöst habe war mir klar das es bei sovielen Datensätzen wohl sehr langsam werden wird, nach dem "aufblähen" der Datenbank hat mein PHP Script auch sehr schnell gestreikt (Out of Memory), seit dem Versuche ich alles in einer Abfrage zu erledigen.

Einer meiner Ansätze war der folgende (der Teil in dem ich die werte dazu Addiere fehlt hier noch, wird aber kein Problem darstellen):
Code:
SELECT 
SUM(max_ext_wert) AS ges_ext_wert, a.id AS a_id, a.titel_id AS a_titel_id, 
a.wert AS a_wert, a.ext_wert AS a_ext_wert, a.ext_id AS a_ext_id, b.id AS b_id, 
b. titel_id AS b_ titel_id, b. wert AS b_ wert, b. ext_wert AS b_ ext_wert, 
b. ext_id  AS b_ ext_id 
FROM (table AS a CROSS JOIN table AS b) LEFT JOIN 
(SELECT MAX(ext_wert) AS max_ext_wert, id, ext_id 
FROM table GROUP BY ext_id) AS summe 
ON summe.id = a.id OR summe.id = b.id 
where a. titel_id = 't_11' and b. titel_id = 't_21' 
LIMIT 5
Bei dieser Variante wird mir nur 1 Datensatz angezeigt (vermutlich wegen dem SUM() ), in dem max_ext_wert leer ist. Der ON bezug scheint nicht korrekt zu sein, wenn ich den Alias a_id nutze kann die Spalte nicht gefunden werden.

Eine Andere Variante, die mir einfällt wäre die daten aus den x_ext_id und x_ext_wert Spalten je eine Spalte zu packen und diese dann zu Gruppieren etc. Jedoch habe ich noch keine möglichkeit gefunden das zu tun.
Die Daten kommen aus mehreren CSV-Dateien die ich nicht beeinflussen kann und auch bei gleicher titel_id einen anderen titel haben können, desshalb habe ich diese Daten in eine Tabelle gesteckt und die Tabelle erstmal nicht aufgeteilt.

Ich bin für jeden Ansatz dankbar, ich weiss das die CROSS JOINS viel Rechenleistung fordern werden bei der Menge an Daten, wenn also jemand eine Lösung weiss die Performanter ist gerne her damit.
Mit Zitat antworten
Antwort

Stichworte
cross join, sum(max())


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
Abfrage Form + Variable + Base64 + file_get_content HILFE ??!! Pitbull PHP Grundlagen 1 31.08.2011 18:42:16
Hilfe bei einer Abfrage memcpy MySQLi/PDO/(MySQL) 3 22.06.2010 14:00:39
Hilfe bei Abfrage... iamgodx MySQLi/PDO/(MySQL) 5 09.06.2009 11:26:10
Abfrage funktionierte gestern noch, brauche Hilfe!! Lins56 PHP Grundlagen 2 18.10.2007 18:17:39
Benötige Hilfe für dyn. Abfrage mittles PHP Trialrider PHP für Fortgeschrittene und Experten 70 09.10.2003 10:08:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:43:47 Uhr.


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


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