php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.11.2011, 21:58  
Neuer Benutzer
 
Registriert seit: 16.05.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Stefan-K befindet sich auf einem aufstrebenden Ast
Standard [SQL] Alles in einem Query?

Moin,

Habe eine Tabelle mit einträgen, wie viel ein Abo kostet. In einer anderen habe ich Einträge von erfolgreich abgeschlossenden Abos.

Ist es möglich, alles in einem Query zu packen und eine "Top5" zu machen? Wer hat die meisten Abos und wer hat am meisten gezahlt.


Gruß
Stefan-K ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 11.11.2011, 23:05  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

Stichworte GROUP BY, SUM(), MAX(), JOIN

Wobei es ev. eigenltich 3 Tabellen sein sollten (Abos, Preis, Abschlüsse) ... ansonsten musst du mehr verraten...

LG
__________________
Keine Zahl != ein Zeichen das keine Zahl ist

Geändert von hausl (11.11.2011 um 23:26 Uhr).
hausl ist offline   Mit Zitat antworten
Alt 11.11.2011, 23:18  
Erfahrener Benutzer
 
Benutzerbild von Delirius
 
Registriert seit: 07.07.2009
Beiträge: 215
PHP-Kenntnisse:
Anfänger
Delirius wird schon bald berühmt werden
Standard [SQL] Alles in einem Query?

Zitat:
Zitat von Stefan-K
Habe eine Tabelle mit einträgen, wie viel ein Abo kostet. In einer anderen habe ich Einträge von erfolgreich abgeschlossenden Abos.
hausl hat dir ja bereits Stichwörter geliefert. Falls du Hilfe bei der Abfrage benötigst wäre es gut, wenn du den Aufbau der Tabellen hier postest, um zu sehen in welcher Relation die Tabellen zueinander stehen.
__________________
LG Delirius

Ein Ring Sie zu knechten...
Delirius ist offline   Mit Zitat antworten
Alt 12.11.2011, 00:35  
Neuer Benutzer
 
Registriert seit: 16.05.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Stefan-K befindet sich auf einem aufstrebenden Ast
Standard

Moin.

Preise sind nicht festgelegt, könnte man machen, muss man aber nicht. Hatte da schon eine CASE Abfrage in der mySQL ausprobiert.

Hier kommen wir zur Struktur:

subscriptionlog: subscriptionlogid -- subscriptionid (PRIMARY mit subscription..) -- userid -- status
subscription: subscriptionid

Jetzt habe ich verschiedene Einträge in der Tabelle subscription. Wenn subscriptionid = 1, dann Abo 1 (10€). Wenn subscriptionid = 2 (20€), dann Abo 2. Mehr erstmal nicht.

ein User kann X Abos abschließen. Jetzt würde ich gerne ermitteln, wer die meisten Abos hat und wieviel er gezahlt hat.
Stefan-K ist offline   Mit Zitat antworten
Alt 12.11.2011, 01:49  
Erfahrener Benutzer
 
Benutzerbild von Delirius
 
Registriert seit: 07.07.2009
Beiträge: 215
PHP-Kenntnisse:
Anfänger
Delirius wird schon bald berühmt werden
Standard [SQL] Alles in einem Query?

Zitat:
Zitat von Stefan-K
ein User kann X Abos abschließen. Jetzt würde ich gerne ermitteln, wer die meisten Abos hat und wieviel er gezahlt hat.
Hast du denn bereits einen Ansatz? Eine Abfrage gestartet?
Zitat:
Zitat von Stefan-K
(...) Jetzt habe ich verschiedene Einträge in der Tabelle subscription (...)
Um genauere Aussagen machen zu können und dir bei der Abfrage zu helfen, solltest du den Aufbau der Tabellen posten, mehr kann ich dir anhand der Informationen aktuell nicht sagen, ausser das du die von hausl genannten Stichwörter verwenden musst.
Zitat:
Zitat von hausl
ansonsten musst du mehr verraten...
Da stimme ich mit ihm überein...
__________________
LG Delirius

Ein Ring Sie zu knechten...
Delirius ist offline   Mit Zitat antworten
Alt 12.11.2011, 09:13  
Neuer Benutzer
 
Registriert seit: 16.05.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Stefan-K befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Um genauere Aussagen machen zu können und dir bei der Abfrage zu helfen, solltest du den Aufbau der Tabellen posten, mehr kann ich dir anhand der Informationen aktuell nicht sagen, ausser das du die von hausl genannten Stichwörter verwenden musst.
Hallo,

welche Informationen denn noch?

Der Aufbau der Tabellen habe ich bereits gepostet:

subscriptionlog: subscriptionlogid -- subscriptionid (PRIMARY mit subscription..) -- userid -- status
subscription: subscriptionid

Einen Ansatz hatte ich schon, allerdings nur die Überprüfung welche Abos er abgeschlosse hat (subscriptionid, 1 oder 2). Wusste aber nicht wie ich die kompletten Einräge zählen kann(die ein user abgeschlossen hat) und dann mit der Summe( subscriptionid = 1 = 10€, subscriptionid = 2 = 20€) multiplizieren kann.

Nochmal:

Es werden alle Abos in subscriptionlog gespeichert. subscription werden alle "Verträge" gespeichert. Sprich, wenn user Abo 1 bestellt, ist es auch subscription 1 (subscriptionid = 1). Ich will halt alle Einträge ermitteln, wieviele Abos ein user abgeschlossen hat und dazu noch den gesammten Preis. Die Preise stehen nicht in der Datenbank, in der Tabelle subscription wird das so gerechnet = subscriptionid = 1 = 10€. subscriptionid = 2 = 20€.
Stefan-K ist offline   Mit Zitat antworten
Alt 12.11.2011, 09:30  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.856
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Sowas ist möglich ja. Allerdings halte ich es etwas "unnormalisiert" wenn du die Preise nicht als einzelne Tabelle bereitstellst und man die Preise anhand der subscriptionID im query hardcoden muss. Desweiteren sind das 2 Paar Schuhe ob jemand die meisten Abo's hat oder am meisten Zahlt. Entsprechend solltest du entweder 10 ( 2x Top5 ) Rows am ende erhalten, oder 2 Queries erzeugen die jeweils die Top5 für die meisten Abo's oder die meisten Ausgaben zurückgeben.

Einzeln ( jeweils 5 rows ):
Äußeres Select mit Limit auf 5, descandend sort. Inneres Select mit Max(feld) und Summierung des Counts innerhalb einer Bedingung ( IF THEN ELSE, siehe mysql handbuch ).

alles zusammen ( 10 rows ):
Parent Select
( Äußeres Select mit Limit auf 5, descandend sort. Inneres Select mit Max(feld) und Summierung des Counts innerhalb einer Bedingung. )
UNION
( same again, für den 2ten Zustand )
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 12.11.2011, 09:47  
Neuer Benutzer
 
Registriert seit: 16.05.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Stefan-K befindet sich auf einem aufstrebenden Ast
Standard

ok danke.

Bin nicht der mySQL Typ, bin nur in der .NET Branche tätig. Dazu kommt noch, ich will nur den die top3 der Käufer anzeigen (Wer hat am meisten bezahlt). Die Preise stehen auch in der subscription Tabelle unter costs. Allerdings ist die merkwürdig aufgebaut:
Zitat:
a:1:{i:0;a:6:{s:4:"cost";a:5:{s:3:"eur";s:5:"10.00 ";}}}
(verkürzt) kann man das auch irgendwie auslesen? Ist das ein Array in mysql? (Hatte in Erinnerung, dass es in mysql noch keine Arrays gibt)
Stefan-K ist offline   Mit Zitat antworten
Alt 12.11.2011, 09:49  
Erfahrener Benutzer
 
Benutzerbild von Delirius
 
Registriert seit: 07.07.2009
Beiträge: 215
PHP-Kenntnisse:
Anfänger
Delirius wird schon bald berühmt werden
Standard [SQL] Alles in einem Query?

Zitat:
Zitat von Stefan-K
welche Informationen denn noch?

Der Aufbau der Tabellen habe ich bereits gepostet:
Das ist nicht ganz richtig...du hast einzelne Informationen aus deinen Tabellen gepostet. Keine Ahnung ob in den Tabellen noch etwas anderes drin steht?! Steht in der Tabelle subscriptionid nur eine Spalte? Die subscriptionid und das war´s? Hast du die Tabellen aufgebaut?

Mach doch einfach ein desc innerhalb (My)SQL und poste den Aufbau, dann sieht man wie die Tabellen komplett aufgebaut sind.
Zitat:
Zitat von tr0y
Allerdings halte ich es etwas "unnormalisiert" wenn du die Preise nicht als einzelne Tabelle bereitstellst und man die Preise anhand der subscriptionID im query hardcoden muss.
Den Rat solltest du dir sicher nochmal durch den Kopf gehen lassen.

Sonst halte dich weiter an die Aussagen von hausl und tr0y.

*Edit*
Zitat:
Zitat von Stefan-K
Die Preise stehen auch in der subscription Tabelle unter costs.
Und genau das ist der Grund warum ich drum gebeten habe, dass du den kompletten Aufbau der Tabellen postest. Du enthältst an der Stelle schlicht und ergreifend Informationen, da mag ich dir nicht mal Absicht unterstellen. Aber einfacher macht´s das nicht, dir zu helfen.
__________________
LG Delirius

Ein Ring Sie zu knechten...

Geändert von Delirius (12.11.2011 um 09:54 Uhr). Grund: Nachtrag vom TE
Delirius ist offline   Mit Zitat antworten
Alt 12.11.2011, 10:03  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.856
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von Stefan-K Beitrag anzeigen
ok danke.

Bin nicht der mySQL Typ, bin nur in der .NET Branche tätig. Dazu kommt noch, ich will nur den die top3 der Käufer anzeigen (Wer hat am meisten bezahlt). Die Preise stehen auch in der subscription Tabelle unter costs. Allerdings ist die merkwürdig aufgebaut: (verkürzt) kann man das auch irgendwie auslesen? Ist das ein Array in mysql? (Hatte in Erinnerung, dass es in mysql noch keine Arrays gibt)
tabelle normalisieren, vorher würd ich garnicht weitermachen.

Falls das nicht möglich ist, zieh es vor die Preise zu hardcoden, jedesmal serialisierungen aus anderen sprachen durch die gegen zu exploden und zu parsen geht immer auf kosten der query-performance.

Bedenke auch das du innerhalb von MySQL die möglichkeit besitzt temporäre Tabellen zu erzeugen und diese dann für die Queries zu nutzen, das ganze kann man theoretisch über trigger ( gebunden an die original tabellen ) lösen ( die dann zeitgleich auch in "deine" tabellen daten "übertragen", jene Tabellen können dann so strukturiert sein das sie die komplette Anwendungsdatenbank normalisiert behandeln. Die Tabellen nutzt du dann mit simpleren Queries um an deine Daten zu kommen. Technisch gesehen kann sogar ein weiterer Trigger eine weitere Tabelle mit Daten füllen die die Top 3 / Top 5 repräsentiert, quasi also nurnoch ein SELECT auf diese Tabelle notwendig ist, das umzusetzen was du willst. ( Data Caching mit und innerhalb MySQL wäre das dann )
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y 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] zend mssql query: Convert wird gequoted MLang PHP-Fortgeschrittene 2 05.09.2011 10:57
[Erledigt] Join Query mit Hilfe des ZF erstellen dreamcatcher PHP Einsteiger 7 14.08.2011 15:03
Mitarbeiter für Query OS gesucht Kasenoru Sonstige 0 18.06.2011 00:34
[Erledigt] hilfe bei sql query (ergebnis filtern) thedarkknight Datenbanken 2 16.06.2011 11:06
impossible where clause / MySQL Integer Query chunky PHP Einsteiger 4 11.04.2011 14:45
' und " in einer Query Ulrikop Datenbanken 7 19.02.2011 17:59
Unabhängige "Auto-Increment Spalte" für ein ON DUPLICATE KEY query? juice122 Datenbanken 4 31.05.2010 20:59
MySQL: INSERT INTO oder UPDATE verknüpft in einem Query juice122 Datenbanken 21 06.05.2010 20:25
[Erledigt] Aufgeteilte Query mit LIMIT & Order bench78 PHP Tipps 2010 4 10.03.2010 02:33
Query funktioniert im SQL Query Browser aber nicht in PHP - DB zu groß ? john_the_bad Datenbanken 10 16.09.2008 18:17
Variablen in Query automatisch escapen Maho88 PHP Tipps 2007 10 31.07.2007 08:42
PHP/MySQL: Query wird nicht ausgeführt Zergling-new Tutorials 5 09.05.2006 23:16
Query, was aus einer Tabelle mehrere Summen rausholt Datenbanken 3 14.09.2005 16:45
select query durch if anweisungen splitten Datenbanken 6 06.09.2004 13:46
[Erledigt] Query läuft nicht Datenbanken 6 13.08.2004 21:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php sql query alle, a:3:{i:0;s:5:\\;} auslesen in php, sql abfragen php anfänger

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:26 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