php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.08.2010, 11:05  
Neuer Benutzer
 
Registriert seit: 24.08.2010
Beiträge: 21
PHP-Kenntnisse:
Anfänger
HiddenX befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Abfrage aus mehreren Tabellen

Hallo allerseits,

ich hoffe ich bin hier richtig, ich denke es ist eher ein mySQL, als ein PHP-"Problem":

Ich möchte aus vier Tabellen, die alle vom Aufbau her identisch sind, nur verschiedene Daten beinhalten, jeweils eine Abfrage über ein Feld durchführen. (Jede Tabelle beinhaltet die Umsätze aller Filialen für ein Jahr)

Momentan mache ich das so, dass ich die Abfragen viermal hintereinander durchführe:
PHP-Code:
        // Abfrage Umsatz 2007
        
$sql2007    =   'SELECT * FROM ums2007 WHERE FILIALE = "'.$filiale.'"';
        
$result2007 =   mysql_query($sql2007) OR die(mysql_error());
        
$row2007    =   mysql_fetch_assoc($result2007);
        
$umsatz2007 =   $row2007['Umsatz'];
        
// Abfrage Umsatz 2008
        
$sql2008    =   'SELECT * FROM ums2008 WHERE FILIALE = "'.$filiale.'"';
        
$result2008 =   mysql_query($sql2008) OR die(mysql_error());
        
$row2008    =   mysql_fetch_assoc($result2008);
        
$umsatz2008 =   $row2008['Umsatz'];
... 
uswfür 2009 und 2009 
Das finde ich natürlich super-umständlich und ist bestimmt auch langsamer, als wenn ich alles in einen SELECT packen könnte, etwa so?

PHP-Code:
        $sql     =   'SELECT * FROM ums2007,ums2008,ums2009,ums2010
                                      WHERE ums2007.FILIALE = "'
.$filiale.'"
                                      AND ums2008.FILIALE = "'
.$filiale.'"
                                      AND ums2009.FILIALE = "'
.$filiale.'"
                                      AND ums2007.FILIALE = "'
.$filiale.'"';
        
$result =   mysql_query($sql2008) OR die(mysql_error());
        
$row    =   mysql_fetch_assoc($result2008);
        
$umsatz =  $row['Umsatz'];   

Die Abfrage funktioniert ja auch, aber wie komme ich jetzt an die Daten? Ich sehe wohl den Wald gerade vor Bäumen nicht mehr, aber $umsatz beinhaltet natürlich immer nur ein Jahr- ich will aber alle vier!
$umsatz = $row['ums2007.Umsatz'] geht natürlich auch nicht
Kann mir jemand einen Tipp geben, wie ich alle Jahre ausgeben kann?

Vielen Dank schon mal für die Hilfe
HiddenX
HiddenX ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 24.08.2010, 11:10  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 495
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Code:
SELECT
    ums2007.Umsatz AS Umsatz2007,
    ums2008.Umsatz AS Umsatz2008,
    ums2009.Umsatz AS Umsatz2009,
    ums2010.Umsatz AS Umsatz2010
FROM ums2007, ums2008, ums2009, ums2010
WHERE ...
SELECT * ist Scheiße; zähle die Spalten, die du haben willst, explizit auf.

Übrigens: auch jetzt werden vier Abfragen gemacht, die sind nur wie eine einzige Abfrage formuliert. Performance gewinnst du dadurch nur, weil die Abfrage nicht vier mal zum Datenbankserver gesendet und dort geparst werden muss.

Alternativ:
Code:
SELECT Umsatz, '2007' AS Jahr FROM ums2007 WHERE ...
UNION
SELECT Umsatz, '2008' AS Jahr FROM ums2008 WHERE ...
UNION
SELECT Umsatz, '2009' AS Jahr FROM ums2009 WHERE ...
UNION
SELECT Umsatz, '2010' AS Jahr FROM ums2010 WHERE ...
Auch hier sind es wieder vier Abfragen, aber du hast alle Umsätze in der gleichen Spalte der Ergebnismenge.

Die Idee, für jedes Jahr eine eigene Tabelle aufzubauen, finde ich auch nicht so toll.

Geändert von mimomamu (24.08.2010 um 11:19 Uhr).
mimomamu ist offline   Mit Zitat antworten
Alt 24.08.2010, 11:14  
Neuer Benutzer
 
Registriert seit: 24.08.2010
Beiträge: 21
PHP-Kenntnisse:
Anfänger
HiddenX befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mimomamu Beitrag anzeigen
[code]SELECT * ist Scheiße; zähle die Spalten, die du haben willst, explizit auf.
Generell gebe ich Dir Recht, in dem Fall sind es aber eh nur 2 Felder.
Abgesehen davon, dass das aufzählen in dem Fall meiner Meinung nach unnötig und umständlich wäre hilft es auch nicht wirklich weiter, oder?
HiddenX ist offline   Mit Zitat antworten
Alt 24.08.2010, 11:25  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Weiterhelfen tut es nicht, tun solltest du es aber dennoch, egal, wie wenige oder viele Spalten es sind:
Wie mimomamu schon angedeutet hat, solltest du nicht für jedes Jahr eine neue Tabelle anlegen. Erstelle stattdessen eine Tabelle für die Jahre und weise jedem Jahr eine ID zu. Diese ID trägst du in die Tabelle für die Umsätze in einer separaten Spalte ein, um eine Zugehörigkeit des Datensatzes zum Jahr festzulegen.

Normalisierung (Datenbank) – Wikipedia

Gruß
Asipak ist offline   Mit Zitat antworten
Alt 24.08.2010, 11:28  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 495
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von HiddenX Beitrag anzeigen
Generell gebe ich Dir Recht, in dem Fall sind es aber eh nur 2 Felder.
Das hat nichts mit der Anzahl der Felder zu tun, sondern mit Dokumentation,

Beispiel: Wenn ich
Code:
SELECT * FROM users
ausführe und dann die Datensätze ausgeben lasse
PHP-Code:
while ($record mysql_fetch_assoc($result)) {
  echo 
$record['email'];

dann bekomme ich keine Ausgabe, obwohl zumindest einige Benutzer eine E-Mail-Adresse angegeben haben. Wenn ich stattdessen
Code:
SELECT email FROM users
ausführe, dann würde der Datenbankserver sofort meckern, weil die Spalte nämlich `e-mail` heißt, nicht `email`.
mimomamu ist offline   Mit Zitat antworten
Alt 24.08.2010, 11:30  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Btw. Wieso trägst du das Jahr nicht einfach als Integer oder Datum in eine Spalte der Umsatztabelle ein? Dann weist du doch, um welches Jahr es sich handelt! Ein zweite Tabelle ist dafür nicht mal notwendig.
Asipak ist offline   Mit Zitat antworten
Alt 24.08.2010, 14:45  
Neuer Benutzer
 
Registriert seit: 24.08.2010
Beiträge: 21
PHP-Kenntnisse:
Anfänger
HiddenX befindet sich auf einem aufstrebenden Ast
Standard

Ok, ich bin ja lernfähig und habe die Tabelle um ein Jahres-Feld erweitert. Damit haben sich noch etliche andere Probleme in Luft aufgelöst.

Danke an alle!
HiddenX 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
SQL abfrage aus 2 Tabellen mit LIKE maclaim1988 Datenbanken 8 19.08.2010 10:06
[Erledigt] Select Abfrage über 2 Tabellen bringt keine Ausgabe clamber Datenbanken 4 03.03.2010 15:25
[Erledigt] Abfrage aus mehreren Normalisierten Tabellen (JOINS) defcut Datenbanken 4 25.08.2009 00:27
Scriptsuche [Erledigt] SQL- Abfrage über 2 tabellen ejim Scriptbörse 1 17.07.2009 21:10
MySql Abfrage aus mehreren Tabellen an eine Tabelle begrenzen. matze123456 Datenbanken 6 20.02.2009 23:43
Wiemache ich eine Abfrage über 3 Tabellen??? djscaleo Datenbanken 8 05.01.2009 10:46
Abfrage über mehrer Tabellen mit Berechnung richyboy Datenbanken 1 04.11.2008 12:00
in einer abfrage ermitteln ob mehrere tabellen existieren? litterauspirna Datenbanken 7 28.10.2008 19:33
Abfrage mehrerer Tabellen per PHP (Code vereinfachen) PHP Tipps 2007 4 18.12.2005 12:34
[Erledigt] MySQL Abfrage aus mehreren Tabellen Datenbanken 1 12.04.2005 17:53
Abfrage aus mehreren Tabellen msdose Datenbanken 6 17.03.2005 10:25
[Erledigt] Selectanfrage an eine Datenbank,aber aus mehreren Tabellen Datenbanken 2 26.10.2004 07:23
2 Tabellen 1 Abfrage nilsfeld Datenbanken 6 11.08.2004 11:18
Abfrage über 3 Tabellen PHP Tipps 2004 3 31.07.2004 22:34
SQL Abfrage aus mehreren Tabellen PHP Tipps 2004 7 26.07.2004 16:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
tabellen abfragen, tabelle umsatz filialen monate jahre

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