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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
16.08.2012, 16:29:25
|
Anfänger
|
|
Registriert seit: Aug 2012
Alter: 43
Beiträge: 2
|
|
Abfrage, welche sich auf eine andere bezieht
Hallo erstmal zusammen,
wie vermutlich fast jeder hier, habe ich mich hier registriert, weil ich ein Problem habe, welches ich alleine anscheinend nicht lösen kann.
Dann gleich mal zu dem Problem:
Ich habe 4 Tabellen.
tbl_spieler (s_id, s_name, s_alter, n_id_f)
tbl_bilder (b_id, b_link, s_id_f)
tbl_nation (n_id, n_nation)
tbl_vereine (v_id, v_verein, s_id_f2)
Ich würde jetzt gerne mittels php eine Seite erstellen, die mir eine Liste aller Spieler untereinander ausgibt. Dort zu sehen ist ein Bild, der Name und das Alter des Spielers. Das klappt auch alles wunderbar. Allerdings möchte ich neben jedem Spieler noch ne Liste, in der seine bisherigen Vereine angezeigt werden. Also quasi ein Endlosunterformular in einem Endlosformular. Das klappt leider nicht. Wo mache ich die Verbindung zwischen den beiden Abfragen oder geht das einfach nicht???
Hier mal der Code:
PHP-Code:
<?
$ergebnis = mysql_query("SELECT b_link, s_id, s_name, s_alter, n_nation
FROM tbl_spieler, tbl_nation, tbl_bilder
WHERE n_id = n_id_f
AND s_id = s_id_f
GROUP BY s_id_f");
$ergebnis2 = mysql_query("SELECT s_id, v_verein
FROM tbl_spieler
INNER JOIN tbl_vereine ON s_id = s_id_f2");
while($row = mysql_fetch_object($ergebnis))
{
echo '<a href=spielerdetails.php?s_id='.$row->s_id.'><img class="images" src="'.$row->b_link.'" alt="" width="250" height="168"></a>';
echo '<a href=spielerdetails.php?s_id='.$row->s_id.'>'.$row->s_name.'</a>';
echo '<p>('.$row->n_nation.")</p>";
while($row = mysql_fetch_object($ergebnis2))
{
echo '<p>'.$row->v_verein."</p>";
}
}
?>
Kann mir vielleicht jemand irgendwie helfen?
VG Max
|
21.08.2012, 17:28:06
|
Anfänger
|
|
Registriert seit: Jul 2011
Alter: 71
Beiträge: 30
|
|
AW: Abfrage, welche sich auf eine andere bezieht
*räusper* Ist mal wieder ein typischer alles-und-nichts-sagender Hinweis!
Aber... beim Blick auf die beiden Statements würde ich sagen, dass Du AUCH im 2.Statement ALLE Spieler mit den zugehörigen Vereinen 'sammelst'. Soweit so gut, ABER: in der 2.WHILE-Schleife gibst Du dann auch ALLE Spieler/Vereine aus, OHNE auf den jeweiligen (in der 1.WHILE-Schleife) gerade anzuzeigenden Spieler zu achten! Mit anderen Worten: jeder Spieler hat ALLE (auch ihm nicht zugehörige Vereine) in der Auflistung.
Zitat:
Wo mache ich die Verbindung zwischen den beiden Abfragen...???
|
Na? Klickerts? Du musst in der zweiten WHILE-Schleife schon auf die gerade 'aktuelle' SpielerID reagieren!
Wie Du das machen willst/möchtest, bleibt Deiner Wahl überlassen. Evtl. das 2.Abfrageergebnis als Array speichern und wenn möglich, jeweils mit der entsprechenden SpielerID filtern und dann mittels WHILE ausgeben. Aber für PHP-technische sind die anderen gefragt - ist derzeit nicht meine Baustelle.
|
22.08.2012, 13:04:36
|
Anfänger
|
|
Registriert seit: Aug 2012
Alter: 43
Beiträge: 2
|
|
AW: Abfrage, welche sich auf eine andere bezieht
Hallo raiguen,
erstmal vielen Dank für deine Antwort.
Zitat:
*räusper* Ist mal wieder ein typischer alles-und-nichts-sagender Hinweis!
|
Mit klappt leider nicht, meinte ich, dass mir nur beim ersten Spieler in der Liste alle (also auch die, bei denen er gar nicht gespielt hat) Vereine angezeigt werden.
Du hast natürlich absolut recht, ich muss irgend wie überprüfen, ob die ID´s gleich sind, so dass er nur die entsprechenden Vereine ausgibt.
Aber wie genau mache ich das in meinen SELECT-Statements?
Zitat:
Wie Du das machen willst/möchtest, bleibt Deiner Wahl überlassen. Evtl. das 2.Abfrageergebnis als Array speichern und wenn möglich, jeweils mit der entsprechenden SpielerID filtern...
|
Kannst du bzw. jemand anderes mir vielleicht ein Tipp oder Link oder so geben, wie ich so etwas machen muss?
VG Max
|
25.08.2012, 09:53:49
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: Abfrage, welche sich auf eine andere bezieht
Hi
Zitat:
Zitat von Max
Kannst du bzw. jemand anderes mir vielleicht ein Tipp oder Link oder so geben, wie ich so etwas machen muss?
|
1. Es ist völlig sinnfrei in einer verschachtelten while - Schleife erneut $row zu benutzen.
2. Sollte man sich vorher beim Tabellendesign gedanken machen was man später in welchem Zusammenhang braucht. Nicht einfach alles tot-Normalisieren und später wundern das man schlechte Abfragezeiten erreicht!
Zitat:
Wie Du das machen willst/möchtest, bleibt Deiner Wahl überlassen. Evtl. das 2.Abfrageergebnis als Array speichern und wenn möglich, jeweils mit der entsprechenden SpielerID filtern und dann mittels WHILE ausgeben
|
Richtig es gibt mehrere ansätze dazu z.B.:
1.
PHP-Code:
while($row = mysql_fetch_object($ergebnis))
{
echo '<a href=spielerdetails.php?s_id='.$row->s_id.'><img class="images" src="'.$row->b_link.'" alt="" width="250" height="168"></a>';
echo '<a href=spielerdetails.php?s_id='.$row->s_id.'>'.$row->s_name.'</a>';
echo '<p>('.$row->n_nation.")</p>";
$ergebnis2 = mysql_query("SELECT s_id, v_verein
FROM tbl_spieler
INNER JOIN tbl_vereine ON s_id = s_id_f2 where s_id='".$row->s_id."'");
while($subrow = mysql_fetch_object($ergebnis2))
{
echo '<p>'.$subrow ->v_verein."</p>";
}
}
2.
PHP-Code:
$ergebnis2 = mysql_query("SELECT s_id, v_verein
FROM tbl_spieler
INNER JOIN tbl_vereine ON s_id = s_id_f2");
//Speichern aller vereine anhand s_id
while($subrow = mysql_fetch_object($ergebnis2))$s_ids[$subrow->s_id][]=$subrow->v_verein;
while($row = mysql_fetch_object($ergebnis))
{
echo '<a href=spielerdetails.php?s_id='.$row->s_id.'><img class="images" src="'.$row->b_link.'" alt="" width="250" height="168"></a>';
echo '<a href=spielerdetails.php?s_id='.$row->s_id.'>'.$row->s_name.'</a>';
echo '<p>('.$row->n_nation.")</p>";
//hat er vereine?
if(isset($s_ids[$row->s_id])){
echo '<p>'.implode(',',$s_ids[$row->s_id])."</p>";
}else{
echo "nö";
}
}
}
Nachteil der ersten variante bei jedem Spieler wird eine weitere SQL Abfrage abgesetzt.
Natürlich kannst du auch alles in einer Abfrage abfangen und dann die Rückgabe wie "raiguen" schon sagte in ein Array packen und dann das array durchgehen.
Denke hast nun genug ansätze.
mfg
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 21:56:37 Uhr.
|