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 ::

TYPO3 Kochbuch

TYPO3 Kochbuch 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 08.06.2008, 18:43:30
Mattes1001 Mattes1001 ist offline
Anfänger
 
Registriert seit: Jun 2008
Alter: 44
Beiträge: 6
"Verschachtelte" Selects über 3 Tabellen

Hi,

ich habe folgende Tabellen. Ich geb mal die komplette Create und inserts mit, damit sich das vielleicht jemand nachbauen kann ;-)

Code:
DROP TABLE IF EXISTS `spieler`;
CREATE TABLE IF NOT EXISTS `spieler` (
  `id` int(3) NOT NULL,
  `uid` varchar(10) collate utf8_unicode_ci NOT NULL,
  `name` varchar(30) collate utf8_unicode_ci NOT NULL,
  `vorname` varchar(30) collate utf8_unicode_ci NOT NULL,
  `pic` varchar(80) collate utf8_unicode_ci default NULL,
  `pic_thumb` varchar(80) collate utf8_unicode_ci default NULL,
  `beschreibung1` varchar(300) collate utf8_unicode_ci default NULL,
  `beschreibung2` varchar(300) collate utf8_unicode_ci default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Daten für Tabelle `spieler`
--

INSERT INTO `spieler` (`id`, `uid`, `name`, `vorname`, `pic`, `pic_thumb`, `beschreibung1`, `beschreibung2`) VALUES
(1, 'hahn_c', 'Hahn', 'Christopher', '/images/spieler/christopher_hahn.jpg', '/images/spieler/thumbs/christopher_hahn.jpg', '', '');
INSERT INTO `spieler` (`id`, `uid`, `name`, `vorname`, `pic`, `pic_thumb`, `beschreibung1`, `beschreibung2`) VALUES
(2, 'hahn_m', 'Hahn', 'Matthias', '/images/spieler/defaultUser.jpg', '/images/spieler/thumbs/matthias_hahn.jpg', '', '');
INSERT INTO `spieler` (`id`, `uid`, `name`, `vorname`, `pic`, `pic_thumb`, `beschreibung1`, `beschreibung2`) VALUES
(3, 'goetz_h', 'Götz', 'Hans', '/images/spieler/hans_goetz.jpg', '/images/spieler/thumbs/hans_goetz.jpg', '', '');
INSERT INTO `spieler` (`id`, `uid`, `name`, `vorname`, `pic`, `pic_thumb`, `beschreibung1`, `beschreibung2`) VALUES
(4, 'ruediger_b', 'Berndt', 'Rüdiger', '/images/spieler/ruediger_berndt.jpg', '/images/spieler/thumbs/ruediger_berndt.jpg', '', '');
INSERT INTO `spieler` (`id`, `uid`, `name`, `vorname`, `pic`, `pic_thumb`, `beschreibung1`, `beschreibung2`) VALUES
(5, 'david_k', 'Komma', 'David', '/images/spieler/david_komma.jpg', '/images/spieler/thumbs/david_komma.jpg', '', '');
INSERT INTO `spieler` (`id`, `uid`, `name`, `vorname`, `pic`, `pic_thumb`, `beschreibung1`, `beschreibung2`) VALUES
(6, 'bernd_s', 'Schulz', 'Bernd', '/images/spieler/bernd_schulz.jpg', '/images/spieler/thumbs/bernd_schulz.jpg', '');
INSERT INTO `spieler` (`id`, `uid`, `name`, `vorname`, `pic`, `pic_thumb`, `beschreibung1`, `beschreibung2`) VALUES
(7, 'philip_w', 'Wurzberger', 'Philip', '/images/spieler/philip_wurzberger.jpg', '/images/spieler/thumbs/philip_wurzberger.jpg', '', '');


DROP TABLE IF EXISTS `aufstellung`;
CREATE TABLE IF NOT EXISTS `aufstellung` (
  `id` int(3) NOT NULL,
  `auf_spieler_id` int(3) NOT NULL REFERENCES spieler(id),
  `saison` int(6) default NULL,
  `geschlecht` varchar(1) collate utf8_unicode_ci default NULL,
  `runde` varchar(2) collate utf8_unicode_ci default NULL,
  `mannschaft` int(1) default NULL,
  `position` int(2) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Daten für Tabelle `aufstellung`
--

INSERT INTO `aufstellung` (`id`, `auf_spieler_id`, `saison`, `geschlecht`, `runde`, `mannschaft`, `position`) VALUES
(1, 1, 200809, 'h', 'vr', 1, 1);
INSERT INTO `aufstellung` (`id`, `auf_spieler_id`, `saison`, `geschlecht`, `runde`, `mannschaft`, `position`) VALUES
(2, 2, 200809, 'h', 'vr', 1, 2);
INSERT INTO `aufstellung` (`id`, `auf_spieler_id`, `saison`, `geschlecht`, `runde`, `mannschaft`, `position`) VALUES
(3, 3, 200809, 'h', 'vr', 1, 3);
INSERT INTO `aufstellung` (`id`, `auf_spieler_id`, `saison`, `geschlecht`, `runde`, `mannschaft`, `position`) VALUES
(4, 4, 200809, 'h', 'vr', 1, 4);
INSERT INTO `aufstellung` (`id`, `auf_spieler_id`, `saison`, `geschlecht`, `runde`, `mannschaft`, `position`) VALUES
(5, 5, 200809, 'h', 'vr', 1, 5);
INSERT INTO `aufstellung` (`id`, `auf_spieler_id`, `saison`, `geschlecht`, `runde`, `mannschaft`, `position`) VALUES
(6, 6, 200809, 'h', 'vr', 1, 6);
INSERT INTO `aufstellung` (`id`, `auf_spieler_id`, `saison`, `geschlecht`, `runde`, `mannschaft`, `position`) VALUES
(7, 7, 200809, 'h', 'vr', 1, 7);

DROP TABLE IF EXISTS `bilanzen`;
CREATE TABLE IF NOT EXISTS `bilanzen` (
  `id` int(3) NOT NULL auto_increment,
  `bil_spieler_id` int(3) NOT NULL REFERENCES spieler(id),
  `saison_clicktt` varchar(10) collate utf8_unicode_ci default NULL,
  `person_clicktt` varchar(8) collate utf8_unicode_ci default NULL,
  `clubnr_clicktt` varchar(4) collate utf8_unicode_ci default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Daten für Tabelle `bilanzen`
--

INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(1, '2007%2F08', '366147', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(1, '2006%2F07', '366147', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(1, '2005%2F06', '366147', '4169');

INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(2, '2007%2F08', '381117', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(2, '2006%2F07', '381117', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(2, '2005%2F06', '381117', '4169');

INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(3, '2007%2F08', '367153', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(3, '2006%2F07', '367153', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(3, '2005%2F06', '367153', '4169');

INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(4, '2007%2F08', '386335', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(4, '2006%2F07', '386335', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(4, '2005%2F06', '386335', '4169');

INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(5, '2007%2F08', '381117', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(5, '2006%2F07', '381117', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(5, '2005%2F06', '381117', '4169');

INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(6, '2007%2F08', '702712', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(6, '2006%2F07', '702712', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(6, '2005%2F06', '702712', '4169');

INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(7, '2007%2F08', '370636', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(7, '2006%2F07', '370636', '4169');
INSERT INTO `bilanzen` (`bil_spieler_id`, `saison_clicktt`, `person_clicktt`, `clubnr_clicktt`) VALUES
(7, '2005%2F06', '370636', '4169');
So.
Was ich nun will ist einmal alle Spieler mit ihrer Aufstellung: 1:1 Beziehung. Die hole ich über
Code:
$result = mysql_query('
    SELECT 
      *
    FROM 
      spieler s, aufstellung a
    WHERE 
    s.id=a.auf_spieler_id
    AND a.mannschaft = '.$mannschaft.'
    AND a.geschlecht = "'.$geschlecht.'"
    AND a.saison = "'.$saison.'"
    AND a.runde = "'.$runde.'"
    
    ;') OR die(mysql_error());
Was ich aber noch brauche sind alle Bilanzen des jeweiligen Spielers.

Code:
$result_b = mysql_query('
     SELECT b.saison_clicktt, b.person_clicktt, b.clubnr_clicktt, b.bil_spieler_id
      FROM bilanzen b
      LEFT JOIN spieler s
      USING ( id )
    ;')OR die(mysql_error());
Innerhalb der Ausgabe des Ergebnisses des ersten Query möchte ich nun die Bilanzen aus der zweiten Anfrage anzeigen lassen.

Kann mir jemand dabei helfen?

Liebe Grüße
Matthias
Mit Zitat antworten
  #2  
Alt 08.06.2008, 20:39:53
stb stb ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 40
AW: "Verschachtelte" Selects über 3 Tabellen

Ich würde mit Tabelle spieler anfangen und dann einfach mit LEFT JOIN alles dran hängen, was ich brauche

Bei dir scheint Tabelle spieler der Kern deiner Tabellenstruktur zu sein.
Also etwa so
PHP-Code:
SELECT     spieler...,
        
spieler...,
        
spieler...,
        
        
aufstellung...,
        
aufstellung...,
        
aufstellung...,
        
        
bilanzen...,
        
SUM(bilanzen...) as name,
        
MAX(bilanzen...) as noch_n_name,
        
    
LEFT JOIN aufstellung
    ON 
(spieler.id aufstellung.spieler_id)
    
    
LEFT JOIN bilanzen
    ON 
(spieler.id bilanzen.splieler_id)

    
WHERE ...
    
GROUP BY spieler.id
    ORDER BY 
...
    
LIMIT ... 
Denk dran, das du alle spalten indizierst, die in ON oder WHERE klauseln angesprochen werden.
__________________
Das schwerste ist das Einfachste:

www.rentstock.de

Mit Zitat antworten
  #3  
Alt 09.06.2008, 09:49:56
Mattes1001 Mattes1001 ist offline
Anfänger
 
Registriert seit: Jun 2008
Alter: 44
Beiträge: 6
AW: "Verschachtelte" Selects über 3 Tabellen

Hi Stb,

danke für Deine Antwort. Hab mir jetzt folgenden Query aus Deinen Tips zusammen gebastelt

Code:
 
SELECT  s.uid, s.name ,s.vorname , s.pic , s.pic_thumb , s.beschreibung1, s.beschreibung2 ,   
            a.auf_spieler_id, a.saison, a.geschlecht, a.runde, a.mannschaft, a.position,
            b.bil_spieler_id, b.saison_clicktt, b.person_clicktt, b.clubnr_clicktt
    FROM spieler s
    LEFT JOIN aufstellung a
    ON (s.id = a.auf_spieler_id)
    
    LEFT JOIN bilanzen b
    ON (s.id = b.bil_spieler_id)

    WHERE s.id=b.bil_spieler_id
    GROUP BY s.id
Allerdings bekomm ich nun für jeden Spieler nur eine Bilanz, nicht alle.
Ich denk mal ein bisschen weiter, falls mir das "Sieges-Bier" von gestern Abend keinen Strich durch die Rechnung macht....

Aber danke schon mal für Schläge auf den Hinterkopf...

Grüße

Geändert von Mattes1001 (09.06.2008 um 09:52:15 Uhr) Grund: .
Mit Zitat antworten
  #4  
Alt 09.06.2008, 10:23:26
stb stb ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 40
AW: "Verschachtelte" Selects über 3 Tabellen

Jetzt bekommst du alle:
PHP-Code:
SELECT  s.uids.name ,s.vorname s.pic s.pic_thumb s.beschreibung1s.beschreibung2 ,   
            
a.auf_spieler_ida.saisona.geschlechta.rundea.mannschafta.position,
            
b.bil_spieler_idb.saison_clickttb.person_clickttb.clubnr_clicktt
    FROM spieler s
    LEFT JOIN aufstellung a
    ON 
(s.id a.auf_spieler_id)
    
    
LEFT JOIN bilanzen b
    ON 
(s.id b.bil_spieler_id)

    
WHERE s.id=b.bil_spieler_id
    
/* 
     ---- GROUP weglassen ---
    GROUP BY s.id
    */ 
Wichtig!
Um COUNT() oder SUM() etc. verwenden zu können, wird GROUP benötigt
__________________
Das schwerste ist das Einfachste:

www.rentstock.de

Mit Zitat antworten
  #5  
Alt 09.06.2008, 10:45:16
Mattes1001 Mattes1001 ist offline
Anfänger
 
Registriert seit: Jun 2008
Alter: 44
Beiträge: 6
AW: "Verschachtelte" Selects über 3 Tabellen

:-) sehr gut. Danke!
Nur jetzt hab ich ja das eigentlich Problem. Wobei das wahrscheinlich gar kein SQL Problem mehr ist.
Ich bekomme nun schön alle Bilanzen aber natürlich pro Bilanz auch wieder den kompletten Spieler.

Was ich ja erreichen möchte ist, dass ich nur einmal den Spieler hab und dann alle seine Bilanzen. Aber das muss ich wohl in php abfangen, oder?

momentan mache ich das so:

PHP-Code:

    
echo "<table>\n";
    echo 
"\t<tr>\n";
          echo 
"\t\t<th>&nbsp;</th>\n";
          echo 
"\t\t<th>Position</th>\n";
          echo 
"\t\t<th>Name</th>\n";
          echo 
"\t\t<th colspan=\"3\">Bilanzen auf Click-TT</th>\n";
          echo 
"\t\t<th>&nbsp;</th>\n";
    echo 
"\t</tr>\n";
    if(
mysql_num_rows($result)) { // gucken ob was im Query drinsteckt
        
while($row mysql_fetch_assoc($result)) {
       
        echo 
"\t<tr class=\"spieler\">\n";
        if (isset(
$row['beschreibung1'])) $beschreibung1=$row['beschreibung1']; else $beschreibung1="noch keine Text vorhanden.";
        if (isset(
$row['beschreibung2'])) $beschreibung2=$row['beschreibung2']; else $beschreibung2="";
        
        
        echo 
"\t\t<td>                
                  \t<a href=\"#TB_inline?height=560&amp;width=660&amp;inlineId=spielerFact"
.$row['uid']."&amp;modal=true \"  class=\"smoothbox\" title=\"".($row['name'].", ".$row['vorname'])."\">
                    \t\t<img src=\""
.$row['pic_thumb']."\" alt=\"".($row['name'].", ".$row['vorname'])." \" height=\"60\" />\n\t\t\t</a>\n\t\t\n";
        
        echo 
"<div id=\"spielerFact".$row['uid']."\" style=\"display:none;\">
                        
                        <p style=\"float:left; width:360px;\">
                          <img src=\""
.($row['pic'])."\" style=\"width:330px;\"/>
                        </p>
                        <h2 style=\"text-align: center;\">"
.($row['name'].", ".$row['vorname'])."</h2>
                        <p>"
.$beschreibung1."</p>
                        <p>"
.$beschreibung2."</p>
                        
                        <p style=\"clear:both; text-align:center\"><input type=\"submit\"  value=\"&nbsp;&nbsp;schließen&nbsp;&nbsp;\" onclick=\"TB_remove()\" /></p>
                      </div>"
;
        
        echo 
"\t\t<td>";
            echo 
$row['position'];
        echo 
"</td>\n";
        echo 
"\t\t<td>";
            echo 
$row['name'].", ".$row['vorname'];
        echo 
"</td>\n";
               
              
$saison_stringereg_replace("20","",$row['saison_clicktt']);
              
$saison_stringereg_replace("%2F","/",$saison_string);
              echo 
"\t\t<td>";
              
              echo 
"<a href=\"http://ttvbw.click-tt.de/cgi-bin/WebObjects/ClickTTVBW.woa/wa/playerPortrait?federation=TTVWH&amp;season=".$row['saison_clicktt']."&amp;person=".$row['person_clicktt']."&amp;club=".$row['clubnr_clicktt']."\" onclick=\"window.open(this.href); return false;\" >".$saison_string."</a>";
              echo 
"</td>\n";
        
        
          
        echo 
"\t</tr>\n";
        
        }
    }
    
    echo 
"</table>\n";
  } 

Geändert von Mattes1001 (09.06.2008 um 11:00:38 Uhr)
Mit Zitat antworten
  #6  
Alt 09.06.2008, 13:03:53
stb stb ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 40
AW: "Verschachtelte" Selects über 3 Tabellen

Ja, das geht mit mysql nicht.

sowas fange ich gerne etwa so ab
PHP-Code:
$last_spieler_id 0;

foreach(
$spieler as $key => $value){
    if(
$last_pieler_id != $spieler[$key]['spieler_id']){
        
// neuer spieler name etc.
        
$last_pieler_id $spieler[$key]['spieler_id'];
    }
    
// liste details von spieler

__________________
Das schwerste ist das Einfachste:

www.rentstock.de

Mit Zitat antworten
  #7  
Alt 09.06.2008, 16:22:46
Mattes1001 Mattes1001 ist offline
Anfänger
 
Registriert seit: Jun 2008
Alter: 44
Beiträge: 6
AW: "Verschachtelte" Selects über 3 Tabellen

Ok,danke.

Ich habs mir jetzt einfach gemacht.
Ich mache zwei selects und mache den Query für die Bilanzen innerhalb der Schleife der Aufstellung.

Also:
Code:
$result = mysql_query($aufstellung_spieler)OR die(mysql_error());
if(mysql_num_rows($result)) { // gucken ob was im Query drinsteckt
        while($row = mysql_fetch_assoc($result)) {
[...]
        $result_b = mysql_query($bilanzen_spieler);
         while($row_b = mysql_fetch_assoc($result_b)) {   
         [...]
         }
[...]

}
Mit Zitat antworten
Antwort


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
wieviele tabellen sind gesund? noxon MySQLi/PDO/(MySQL) 2 09.02.2008 11:15:10
2 Tabellen vermischen thorben MySQLi/PDO/(MySQL) 9 09.10.2007 23:06:24
2 Tabellen zusammenfassen. Problem! basti123456 MySQLi/PDO/(MySQL) 4 03.02.2006 08:01:08
Tabellen innerhalb von Zelle andreaskf HTML, CSS und JavaScript Help! 5 29.04.2005 17:20:44
Db abfragen von 2 tabellen GrafvonHenneber PHP Grundlagen 6 22.01.2003 15:37:48


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:14:56 Uhr.


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


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