php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.04.2006, 11:59  
Erfahrener Benutzer
 
Registriert seit: 19.08.2003
Beiträge: 141
PHP-Kenntnisse:
Fortgeschritten
niffi
Standard Problem mit doppelter Ausgabe

hi,

ich will aus zwei tabellen datenauslesen, was auch klappt, leider wird mir aber immer ein datensatz doppelt ausgegeben, anstatt das ein dritter neuer datensazu ausgegeben wird:

Code:
$shows = "SELECT * FROM w_ftr_bandshows INNER JOIN w_ftr_bands ON w_ftr_bandshows.band_id=w_ftr_bands.band_id WHERE w_ftr_bandshows.show_date>='$Heute' ORDER BY w_ftr_bandshows.show_date ASC LIMIT 8";
		$abfrage = mysql_query($shows);
		$num = mysql_num_rows($abfrage);
		
		for ($y=0; $y<$num; $y++)	
		{
			$band_id = mysql_result($abfrage, $y, "w_ftr_bands.band_id");
			$bandname = mysql_result($abfrage, $y, "w_ftr_bands.band_name");
											
			//Statusabfrage des Referenten
			$sql_bandshows = "SELECT * FROM w_ftr_bandshows WHERE band_id='$band_id'";
			$abfrage_bandshows = mysql_query($sql_bandshows);
			$ausgabe_bandshows = mysql_fetch_array($abfrage_bandshows); 
										
			echo "".datumdt($ausgabe_bandshows[show_date])." - $ausgabe_bandshows[show_place]
$bandname w/".textstring($ausgabe_bandshows[show_bands],25)."

";
			
		}
die ausgabe ist dann

Zitat:
27.04.2006 - Essen
Nasty w/The Path of Resistance...

24.05.2006 - Kommärzbanck / Hammerstadt
Last Day Ever w/Parkway Drive, xBreed ...

24.05.2006 - Kommärzbanck / Hammerstadt
Last Day Ever w/Parkway Drive, xBreed ...
woran kann das liegen?

Ziel ist es das er sich aus den tabllen den bandnamen zieht und mir jeweils die 8 nächstens konzerte anzeigt,
optional halt immer drüber den bandnamen, das wäre aber egal.

kann mir einer helfen? danke.
niffi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 22.04.2006, 12:38  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wähl doch einfach alle Bands aus, die du anzeigen möchtest und innerhalb der Schleife dann nochmal eine Auswahl auf die 8 ersten Einträge der Band.

Warum der Eintrag doppelt vorkommen könnte ist, weil du eben oben 8 Bandshows holst, und darin stehen ja Bands mit ihren Shows und die Bands können ja doppelt vorkommen...

Benutz außerdem bitte Anführungszeichen für Array-Indexe, also statt
$ausgabe_bandshows[show_bands]
$ausgabe_bandshows["show_bands"]
Das andere ist falsch, wird aber toleriert.
Außerdem solltest du nicht mit * alles selektieren, wenn du sowieso nur 2 Einträge benötigst.
Und mysql_result() solltest du nicht benutzen, dafür gibt es die mysql_fetch_*() Funktionen.
Zergling-new ist offline  
Alt 22.04.2006, 13:03  
Erfahrener Benutzer
 
Registriert seit: 19.08.2003
Beiträge: 141
PHP-Kenntnisse:
Fortgeschritten
niffi
Standard

ok habs jetzt so geändert, was allerdings wieder das gleiche problem aufwirft...

Code:
	  <?php
	
		$shows = "SELECT * FROM w_ftr_bandshows INNER JOIN w_ftr_bands ON w_ftr_bandshows.band_id=w_ftr_bands.band_id";
		$abfrage = mysql_query($shows);
		while ($ausgabe = mysql_fetch_array($abfrage))	{
		
			$band_id = $ausgabe['band_id']; //echo "$band_id";
			$bandname = $ausgabe['band_name']; //echo "$bandname";
			
			$sql_bandshows = "SELECT * FROM w_ftr_bandshows WHERE band_id='$band_id' AND show_date>='$Heute'";
			$abfrage_bandshows = mysql_query($sql_bandshows);
			$ausgabe_bandshows = mysql_fetch_array($abfrage_bandshows); 
											
			echo "".datumdt($ausgabe_bandshows['show_date'])." - $ausgabe_bandshows['show_place']
$bandname w/ ".textstring($ausgabe_bandshows['show_bands'],25)."

";

		}
  
	  ?>
ich mein wenn eine band mehr dates hat is ja logisch das die erscheinen sollen, aber nicht die gleiche show 2 oder mehrmal
niffi ist offline  
Alt 22.04.2006, 13:21  
Gast
 
Beiträge: n/a
Standard

Welche Logik steckt dahinter, dass Du eine Abfrage auf die Tabelle w_ftr_bandshows ausführst und dann in einer while-Schleife ein Feld aus dem Ergebnis verwendest, um weitere Abfragen auszufügen (bei sql in 999 von 1000 Fällen ein großes no-no) ... wieder auf der Tabelle w_ftr_bandshows?
 
Alt 22.04.2006, 13:37  
Erfahrener Benutzer
 
Registriert seit: 19.08.2003
Beiträge: 141
PHP-Kenntnisse:
Fortgeschritten
niffi
Standard

ja war blödsinn, bin drauf gekommen, ich hab die abfragen vertauscht, sprich muss erst die konzerte abfragen und dann anhand der band_id nur noch rausbekommen, welche band dort spielt,

so gehts:

Code:
		$shows = "SELECT * FROM w_ftr_bandshows WHERE show_date>='$Heute' ORDER BY show_date ASC";
		$abfrage = mysql_query($shows);
		while ($ausgabe = mysql_fetch_array($abfrage))	{
		
			$band_id = $ausgabe['band_id']; //echo "$band_id";
			$ort = $ausgabe['show_place'];
			$text = $ausgabe['show_text'];
			$bands = $ausgabe['show_bands'];
			$datum = $ausgabe['show_date'];
		
			$sql_bandshows = "SELECT * FROM w_ftr_bands WHERE band_id='$band_id'";
			$abfrage_bandshows = mysql_query($sql_bandshows);
			$ausgabe_bandshows = mysql_fetch_array($abfrage_bandshows);
			
				if ($ausgabe_bandshows['band_id']==$band_id)	{
											
					echo "".datumdt($datum)." - ".$ort."
".$ausgabe_bandshows['band_name']." w/ ".textstring($bands, 25)."

";
			
				}

		}
dennoch danke für alle hinweise
niffi ist offline  
Alt 22.04.2006, 13:42  
Gast
 
Beiträge: n/a
Standard

Das sind immer noch x Abfragen in einer while-Schleife, die Felder aus der äußeren Abfrage in der WHERE-Bedingung benutzen. Immer noch ein großes no-no.
Zitat:
$shows = "SELECT * FROM w_ftr_bandshows WHERE show_date>='$Heute' ORDER BY show_date ASC";
Da jetzt wieder das JOIN für den Namen der Band rein und Du hast alle Daten ohne Abfrageschleife. Oder übersehe ich da etwas?
 
Alt 22.04.2006, 13:50  
Erfahrener Benutzer
 
Registriert seit: 19.08.2003
Beiträge: 141
PHP-Kenntnisse:
Fortgeschritten
niffi
Standard

die tabelle "w_ftr_bands" besteht nur aus den feldern " id " und " bandname ", und da ich beide felder abfrage ist es doch ok das sternchen zu nutzen. sollte ich die tabelle erweitern, werde ich das " * " ersetzen mit den beiden feldern die ich brauche, richtig.

und in der oberen abfrage brauche ich alle felder, für die anschließende ausgabe....
niffi ist offline  
Alt 22.04.2006, 13:57  
Gast
 
Beiträge: n/a
Standard

Mir geht es nicht um das Sternchen, sondern um die in meinen Augen unnötige zweite Abfrage. Nochmal:
Code:
while($row = mysql_fetch... {
	$innerQuery = 'SELECT ... WHERE xyz='.$row['field'];
	
}
Das ist in den allermeisten Fällen nicht nur unnötig. Es ist langsam und relativ resourcen fressend, weil sql so nicht unbedingt gedacht ist.
Ausserdem ist dafür zusätzlicher Code notwendig, so dass es irgendwann auch sehr unübersichtlich wird. (Das andere Extrem, unbedingt alles in eine Mamutabfrage questschen zu müssen, allerdings auch).

Gehen wir nochmal zu Deiner allerersten Abfrage zurück
Zitat:
$shows = "SELECT * FROM w_ftr_bandshows INNER JOIN w_ftr_bands ON w_ftr_bandshows.band_id=w_ftr_bands.band_id WHERE w_ftr_bandshows.show_date>='$Heute' ORDER BY w_ftr_bandshows.show_date ASC LIMIT 8";
Sämtliche Felder von w_ftr_bandshows INNER JOIN w_ftr_bands. Umfasst das nicht auch die id und den bandnamen?
Klar tut es das. Warum also pro Datensatz nochmal abfragen?
 
Alt 22.04.2006, 14:10  
Erfahrener Benutzer
 
Registriert seit: 19.08.2003
Beiträge: 141
PHP-Kenntnisse:
Fortgeschritten
niffi
Standard

dann wohl eher so:

Code:
<?php

		$shows = "SELECT * FROM w_ftr_bandshows INNER JOIN w_ftr_bands ON w_ftr_bandshows.band_id=w_ftr_bands.band_id WHERE w_ftr_bandshows.show_date>='$Heute' ORDER BY w_ftr_bandshows.show_date ASC LIMIT 8"; 		
		$abfrage = mysql_query($shows);
		$num = mysql_num_rows($abfrage);
		
		for ($i=0; $i<$num; $i++)
		
			{
				$show_band_id = mysql_result($abfrage, $i, "w_ftr_bandshows.band_id");
				$ort = mysql_result($abfrage, $i, "w_ftr_bandshows.show_place");
				$text = mysql_result($abfrage, $i, "w_ftr_bandshows.show_text");
				$bands = mysql_result($abfrage, $i, "w_ftr_bandshows.show_bands");
				$datum = mysql_result($abfrage, $i, "w_ftr_bandshows.show_date");
				$band_id = mysql_result($abfrage, $i, "w_ftr_bands.band_id");
				$bandname = mysql_result($abfrage, $i, "w_ftr_bands.band_name");
			
				if ($show_band_id==$band_id)	{
											
					echo "".datumdt($datum)." - ".$ort."
".$bandname." w/ ".textstring($bands, 25)."

";
			
				}

			}
  
?>
und es geht [/quote]
niffi ist offline  
Alt 22.04.2006, 14:24  
Gast
 
Beiträge: n/a
Standard

Prima, ich bin begeistert
...bis auf zwei Kleinigkeiten: mysql_result? Warum ist denn das schöne, schnelle mysql_fetch_row plötzlich in Ungnade gefallen? Und plötzlich auch kein while mehr sondern num_rows/for?
Das ist schon ein deutlich anderer Programmierstil. Lösung aus einem anderen board?
 
 


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] problem keine ausgabe coraplanet PHP Tipps 2008 12 02.05.2008 18:51
Class Ausgabe Problem wk-moray PHP-Fortgeschrittene 6 12.02.2008 10:06
problem mit ausgabe von daten phyton Datenbanken 3 02.07.2007 17:44
Problem mit der Ausgabe Kein Genie PHP Tipps 2006 5 26.11.2006 21:24
Problem mit einer Ausgabe mit for... PHP Tipps 2005-2 4 30.09.2005 19:26
3 Tabellen verbunden -- Ausgabe in einer Spalte Datenbanken 4 06.09.2005 10:43
Problem mit der Ausgabe PHP Tipps 2005-2 2 29.07.2005 18:09
problem bei ausgabe einer abfrage aus 2 Tabellen Lia PHP Tipps 2005-2 2 28.07.2005 17:30
Problem mit PFad Firefox - Verzeichnis löschen PHP Tipps 2005-2 0 19.07.2005 16:05
Problem mit Ausgabe in Optionfelder (<select>) Monty77 PHP Tipps 2005 4 27.01.2005 22:33
[Erledigt] Problem mit Text Ausgabe in neuem Fenster PHP Tipps 2005 6 18.01.2005 14:24
variablen ausgabe problem..... PHP Tipps 2005 3 06.01.2005 02:27
Problem mit Ausgabe picco PHP Tipps 2004-2 2 24.12.2004 15:38
problem mit ausgabe bei einer "tmp"-table... nautiluS PHP Tipps 2004-2 0 20.12.2004 15:12
Problem mit Array und Ausgabe picco PHP Tipps 2004-2 3 16.12.2004 23:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-tipps-2006/39327-problem-mit-doppelter-ausgabe.html, \parkway drive\ hammerstadt, parkway drive hammerstadt

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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.