php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.03.2010, 13:05  
Benutzer
 
Registriert seit: 09.10.2008
Beiträge: 53
dave303 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Intertabellarische Berechnungen, wie?

Hi zusammen

In meiner Datenbank gibt es 9 Tabellen. In jeder Tabelle gibt es eine Feld "Prio". Dieses Feld kann den Wert 1 bis 3 haben.

Ich suche einen SQL Befehl um:
alle Prio Felder mit Inhalt "1" der 9 Tabellen und
alle Prio Felder mit Inhalt "2" aller 9 Tabellen und
alle Prio Felder mit Inhalt "3" aller 9 Tabellen zusammen zu rechnen

Also insgesamt 3 Variablen müsste ich haben.

Habe den ganzen Morgen diverses Versucht, mit JOIN, UNION usw aber ich kriegst nicht hin.

Evtl hat jemand ne Idee.

Viele Grüsse
dave303 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.03.2010, 13:21  
thomas_w
Gast
 
Beiträge: n/a
Standard

Probier doch mal folgendes...

Code:
SELECT daten.prio, SUM(daten.col1)
  FROM ( SELECT 1 AS tabelle, prio, col1, col2 FROM tabelle1
          WHERE prio IN (1,2,3)
         
         UNION ALL
         
         SELECT 2 AS tabelle, prio, col1, col2 FROM tabelle2
          WHERE prio IN (1,2,3) 
         
         UNION ALL
         
         [.weiter Tabellen..]
         
       ) daten
 GROUP BY daten.prio
 ORDER BY daten.prio;
Grüße
Thomas
  Mit Zitat antworten
Alt 02.03.2010, 13:50  
Benutzer
 
Registriert seit: 09.10.2008
Beiträge: 53
dave303 befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für dein Tipp, dazu noch eine Frage:

"tabelle1" und "tabelle2" in deinem Code habe ich durch die richtigen Tabellennamen bei mir ersetzt. habe dann deinen Code getestet:

PHP-Code:
SELECT daten.prioSUM(daten.col1)
  
FROM SELECT 1 AS tabellepriocol1col2 FROM agent_01
          WHERE prio IN 
(1,2,3)
         
         
UNION ALL
         
         SELECT 2 
AS tabellepriocol1col2 FROM agent_02
          WHERE prio IN 
(1,2,3
         
         
UNION ALL
         
      
       
daten
 GROUP BY daten
.prio
 ORDER BY daten
.prio 
Da scheint es aber noch einen Fehler zu geben:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') daten GROUP BY daten.prio ORDER BY daten.prio' at line 13
dave303 ist offline   Mit Zitat antworten
Alt 02.03.2010, 13:54  
Erfahrener Benutzer
 
Registriert seit: 24.10.2008
Beiträge: 298
PHP-Kenntnisse:
Fortgeschritten
KarlEgon befindet sich auf einem aufstrebenden Ast
Standard

UNION ALL musst du auch noch rausnehmen wenn du keine weiteren Tabellen mehr nutzen willst
KarlEgon ist offline   Mit Zitat antworten
Alt 02.03.2010, 14:22  
Benutzer
 
Registriert seit: 09.10.2008
Beiträge: 53
dave303 befindet sich auf einem aufstrebenden Ast
Standard

Hi

Habe das letzte UNION All weg genommen, erhalte aber immer noch eine Fehlermeldung: #1054 - Unknown column 'col1' in 'field list'
dave303 ist offline   Mit Zitat antworten
Alt 02.03.2010, 14:29  
thomas_w
Gast
 
Beiträge: n/a
Standard

Die Spalten "col1" und "col2" sind natürlich nur Beispiele. Du solltest schon überall die richtigen Spalten aus Deinen Tabellen einsetzen.

Grüße
Thomas
  Mit Zitat antworten
Alt 03.03.2010, 11:19  
Benutzer
 
Registriert seit: 09.10.2008
Beiträge: 53
dave303 befindet sich auf einem aufstrebenden Ast
Standard

Ach so, also ich brauche eigentlich nur die die Spalte "Prio". Habe nun den folgenden CODE generiert, welcher mir im PHP MyAdmin genau die richtigen Resultate liefert, nämlich das Total aller Prio1, Total Prio2, Prio3. Anstelle SUM habe ich aber COUNT genommen, da ich die Anzahl benötige:

PHP-Code:
"SELECT daten.prio, COUNT(daten.prio)
  FROM ( SELECT 1 AS tabelle, prio FROM agent_01
          WHERE prio IN (1,2,3)
         
         UNION ALL
         
         SELECT 2 AS tabelle, prio FROM agent_02
          WHERE prio IN (1,2,3)  

         UNION ALL

         SELECT 3 AS tabelle, prio FROM agent_03
          WHERE prio IN (1,2,3)  

         UNION ALL

         SELECT 4 AS tabelle, prio FROM agent_04
          WHERE prio IN (1,2,3)  

         UNION ALL

         SELECT 5 AS tabelle, prio FROM agent_05
          WHERE prio IN (1,2,3)  

         UNION ALL

         SELECT 6 AS tabelle, prio FROM agent_06
          WHERE prio IN (1,2,3)  

         UNION ALL

         SELECT 7 AS tabelle, prio FROM agent_07
          WHERE prio IN (1,2,3)  

         UNION ALL

         SELECT 8 AS tabelle, prio FROM agent_03
          WHERE prio IN (1,2,3)  

         UNION ALL

         SELECT 9 AS tabelle, prio FROM agent_09
          WHERE prio IN (1,2,3)  
      
       ) daten
 GROUP BY daten.prio
 ORDER BY daten.prio 
jetzt müsste ich diese 3 Resultate nur noch in je einer PHP Variable ausgeben können. Kann ich das irgendwie mit SQL AS machen je Resulat und dann mit

PHP-Code:
       $result mysql_query($abfrage);
    if(!
$result){ echo mysql_error(); }
    
$row mysql_fetch_assoc($result);
    echo 
"<br />"." Total Prio 1  ".$row['sowieso'];
    echo 
"<br />"." Total Prio 2  ".$row['sowieso'];
    echo 
"<br />"." Total Prio 3  ".$row['sowieso']; 
in PHP auslesen? Liebe Grüsse
dave303 ist offline   Mit Zitat antworten
Alt 04.03.2010, 09:22  
Benutzer
 
Registriert seit: 09.10.2008
Beiträge: 53
dave303 befindet sich auf einem aufstrebenden Ast
Standard

Also, ich die Lösung, wenn ich auch sicher bin dass mein Code viel zu lang ist und es irgendwie kürzer gehen würde. Dies nur zur Info für Interessierte:

PHP-Code:
    $abfrage "SELECT daten.prio, COUNT(daten.prio) as resultat_prio1
  FROM ( SELECT 1 AS tabelle, prio FROM agent_01
          WHERE prio IN (1)
         
         UNION ALL
         
         SELECT 2 AS tabelle, prio FROM agent_02
          WHERE prio IN (1)  

         UNION ALL

         SELECT 3 AS tabelle, prio FROM agent_03
          WHERE prio IN (1)  

         UNION ALL

         SELECT 4 AS tabelle, prio FROM agent_04
          WHERE prio IN (1)  

         UNION ALL

         SELECT 5 AS tabelle, prio FROM agent_05
          WHERE prio IN (1)  

         UNION ALL

         SELECT 6 AS tabelle, prio FROM agent_06
          WHERE prio IN (1)  

         UNION ALL

         SELECT 7 AS tabelle, prio FROM agent_07
          WHERE prio IN (1)  

         UNION ALL

         SELECT 8 AS tabelle, prio FROM agent_03
          WHERE prio IN (1)  

         UNION ALL

         SELECT 9 AS tabelle, prio FROM agent_09
          WHERE prio IN (1)  
      
       ) daten
"
;

    
$result mysql_query($abfrage);
    if(!
$result){ echo mysql_error(); }
    
$row mysql_fetch_assoc($result);
    
$resultat_prio1 $row['resultat_prio1'];

    
$abfrage "SELECT daten.prio, COUNT(daten.prio) as resultat_prio2
  FROM ( SELECT 1 AS tabelle, prio FROM agent_01
          WHERE prio IN (2)
         
         UNION ALL
         
         SELECT 2 AS tabelle, prio FROM agent_02
          WHERE prio IN (2)  

         UNION ALL

         SELECT 3 AS tabelle, prio FROM agent_03
          WHERE prio IN (2)  

         UNION ALL

         SELECT 4 AS tabelle, prio FROM agent_04
          WHERE prio IN (2)  

         UNION ALL

         SELECT 5 AS tabelle, prio FROM agent_05
          WHERE prio IN (2)  

         UNION ALL

         SELECT 6 AS tabelle, prio FROM agent_06
          WHERE prio IN (2)  

         UNION ALL

         SELECT 7 AS tabelle, prio FROM agent_07
          WHERE prio IN (2)  

         UNION ALL

         SELECT 8 AS tabelle, prio FROM agent_03
          WHERE prio IN (2)  

         UNION ALL

         SELECT 9 AS tabelle, prio FROM agent_09
          WHERE prio IN (2)  
      
       ) daten
"
;

    
$result mysql_query($abfrage);
    if(!
$result){ echo mysql_error(); }
    
$row mysql_fetch_assoc($result);
    
$resultat_prio2 $row['resultat_prio2'];

    
$abfrage "SELECT daten.prio, COUNT(daten.prio) as resultat_prio3
  FROM ( SELECT 1 AS tabelle, prio FROM agent_01
          WHERE prio IN (3)
         
         UNION ALL
         
         SELECT 2 AS tabelle, prio FROM agent_02
          WHERE prio IN (3)  

         UNION ALL

         SELECT 3 AS tabelle, prio FROM agent_03
          WHERE prio IN (3)  

         UNION ALL

         SELECT 4 AS tabelle, prio FROM agent_04
          WHERE prio IN (3)  

         UNION ALL

         SELECT 5 AS tabelle, prio FROM agent_05
          WHERE prio IN (3)  

         UNION ALL

         SELECT 6 AS tabelle, prio FROM agent_06
          WHERE prio IN (3)  

         UNION ALL

         SELECT 7 AS tabelle, prio FROM agent_07
          WHERE prio IN (3)  

         UNION ALL

         SELECT 8 AS tabelle, prio FROM agent_03
          WHERE prio IN (3)  

         UNION ALL

         SELECT 9 AS tabelle, prio FROM agent_09
          WHERE prio IN (3)  
      
       ) daten
"
;
    
$result mysql_query($abfrage);
    if(!
$result){ echo mysql_error(); }
    
$row mysql_fetch_assoc($result);
    
$resultat_prio3 $row['resultat_prio3']; 
dave303 ist offline   Mit Zitat antworten
Alt 04.03.2010, 16:08  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
wenn ich auch sicher bin dass mein Code viel zu lang ist
Das spricht einfach nur für Dein schlecht gewähltes DB Design.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 05.03.2010, 08:15  
Benutzer
 
Registriert seit: 09.10.2008
Beiträge: 53
dave303 befindet sich auf einem aufstrebenden Ast
Standard

öhm , kannst du mich da Aufklären?
dave303 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
Captcha berechnungen martl666 PHP Tipps 2009 3 13.03.2009 09:51
Prozent Berechnungen für Statistiken 7Style PHP Tipps 2008 7 14.06.2008 14:06
[Erledigt] Baumstruktur (Parent) Berechnungen PHP-Fortgeschrittene 6 31.03.2006 14:45
ein counter - und berechnungen netti PHP Tipps 2005-2 11 24.10.2005 21:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
berechnungen mit php, einfache berechnungen mit php

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