Ankündigung

Einklappen
Keine Ankündigung bisher.

Bräuchte hilfe bei schleifenproblem innerhalb SQL anweisung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bräuchte hilfe bei schleifenproblem innerhalb SQL anweisung

    Hallo,

    ich bin im Moment mit meinem Latein am Ende.
    Habe folgendes Problem.

    Ich habe eine "Home DVD Sammlung" DB erstellt, mit mehreren Tabellen

    Habe jetzt mal eine Test select Anweisung geschrieben, mit den ausgaben Filmtitel, Laufzeit, Studio, Genre, FSK und Schaupielernamen.

    3 Tabellen
    Film (Daten),
    Darsteller (Zwischentabelle die beide Tabellen verbindet)
    und Schauspieler (mit allen Schauspielern für alle Filme)

    Diese sollen in einer Tabelle ausgegeben werden. -> klappt auch

    Desweitern sollen alle zugehörigen Schauspieler in einem Tabellenfeld ausgeben werden.

    -> Aber es werden pro Schauspieler ein kompletter Datensatz ausgegeben.

    Leider klappt das nicht, habe schon While und for schleifen probiert aber ohne erfolg.

    Ich werde mal den Quellecode einfügen:

    Code:
    <?php
    
    		$host="localhost";
    		$benutzer="123123";
    		$passwd="testtest";
    		$db='filme';
    
    		mysql_connect($host,$benutzer,$passwd);
    		mysql_select_db($db) or die("fehler bei der Verbindung mit $db");
    ?>
    
    <center>
    <table width="900" border="1">
    <tr><td>
    <table>
    <tr>
    <td valign="top" width="200">
    		
    		<form action="film_archiv.php" method="Get">
    		<table width="122" border="0" cellspacing="2" cellpadding="0">
    		<tr>
    		<td></td>
    		<td><font size="2" face="tahoma"><strong>Suche</strong></font></td>
    		</tr>
    		<tr>
    		<td><font size="2" face="tahoma"><strong>Titel:</strong></font></td>
    		<td><font size="2" face="tahoma"><input type="text" name="titel" size="15" /></font></td>
    		</tr>
    		<tr>
    		<td><font size="2" face="tahoma"><strong>Schauspieler:</strong></font></td>
    		<td><font size="2" face="tahoma"><input type="text" name="schauspieler" size="15" /></font></td>
    		</tr>
    		<tr>
    		<td><font size="2" face="tahoma"><strong>Studio:</strong></font></td>
    		<td><font size="2" face="tahoma">
    		
    		<select name="studio" size="1">
    		<option>-ALLE-</option>
    
    			<?php				
    				$query = "select distinctrow Studio from film";
    				$result = mysql_query($query);							
    				while($row = mysql_fetch_row($result))
    				{
    				echo "<option>$row[0]</option>";
    				}
    			?>
    			
    		</select></font></td>
    		</tr>
    		<tr>
    		<td><font size="2" face="tahoma"><strong>Genre:</strong></font></td>
    		<td><font size="2" face="tahoma"><select name="genre" size="1">
    		<option>-ALLE-</option>
    
    			<?php
    				$query = "select distinctrow Genre from genre";
    				$result = mysql_query($query);							
    				while($row = mysql_fetch_row($result))
    				{
    				echo "<option>$row[0]</option>";
    				}
    			?>
    
    		</select></font></td>
    		</tr>
    		<tr>
    		<td><font size="2" face="tahoma"><strong>FSK:</strong></font></td>
    		<td><font size="2" face="tahoma"><select name="fsk" size="1">
    		<option>-ALLE-</option>
    
    			<?php
    				$query = "select distinctrow FSK from Film";
    				$result = mysql_query($query);									
    				while($row = mysql_fetch_row($result))
    				{
    				echo "<option>$row[0]</option>";
    				}
    			?>
    
    		</select></font></td>
    		</tr>
    		<tr>
    		<td></td>
    		<td><font size="2" face="tahoma"><br />
    		</font></td>
    		</tr>
    		<tr>
    		<td><font size="2" face="tahoma"><strong><input type="reset" value="Reset" /></strong></font></td>
    		<td><font size="2" face="tahoma"><input type="submit" value="Search" /></font></td>
    		</tr>
    
    		</table>
    		</form>		
    		</td>
    
    <td valign="top" width="600">		
    
    <?php
    	
    $t=$_GET['titel'];
    $s=$_GET['schauspieler'];
    $st=$_GET['studio'];
    $g=$_GET['genre'];
    $f=$_GET['fsk'];
    $bed=0;
    
    			$query = "SELECT f.titel, f.spielzeit, f.studio, f.release, f.fsk, s.name
    			FROM film f INNER JOIN darsteller d ON f.film_id = d.film_id
    			INNER JOIN schauspieler s ON d.darsteller_id = s.darsteller_id"; 
    			
    						
    			if ($t!="")
    			{$bed_t="(f.titel like \"%$t%\")"; $query .= " where $bed_t"; $bed++;}
    			else {$bed_t="";}
    
    			if ($s!="")
    			{$bed_s="(s.name like \"%$s%\")"; $query .= " where $bed_s"; $bed++;}
    			else {$bed_s="";}
    			
    			if ($st!="-ALLE-")
    			{$bed_st="(f.studio = \"$st\")";
    			if ($bed>0) {$query .= " AND $bed_st";} 
    			else {$query .= " where $bed_st"; $bed++;}
    			}
    			else {$bed_st="";}
    
    			if ($g!="-ALLE-")
    			{$bed_g="(g.genre = \"$g\")";
    			if ($bed>0) {$query .= " AND $bed_g";} 
    			else {$query .= " where $bed_g"; $bed++;}
    			}
    			else {$bed_g="";}
    
    			if ($f!="-ALLE-")
    			{$bed_f="(f.fsk = \"$f\")";
    			if ($bed>0) {$query .= " AND $bed_f";} 
    			else {$query .= " where $bed_f"; $bed++;}
    			}
    			else {$bed_f="";}
    
    			$result = mysql_query($query);
    
    			#echo $query;
    			
    			while($row = mysql_fetch_row($result))
    			{
    			
    				
    			echo
    			'<table width="250" border="1" cellspacing="2" cellpadding="0">
    			<tr>
    				<td>'.$row[0].'</td>
    				<td>Titel</td>
    			</tr>
    			<tr>
    				<td>'.$row[1].'</td>
    				<td>Spielzeit</td>
    			</tr>
    			<tr>
    				<td>'.$row[2].'</td>
    				<td>Studio</td>
    			</tr>
    			<tr>
    				<td>'.$row[3].'</td>
    				<td>Jahr</td>
    			</tr>
    			<tr>
    				<td>'.$row[4].'</td>
    				<td>FSK</td>
    			</tr>
    			<tr>
    				<td>'.$row[5].'</td>
    				<td>Schauspieler</td>
    			</tr>
    			
    			</table>';
    			}
    			
    	?>
    
    </td>
    </tr>
    </table>
    </td></tr>
    </table>
    </center>
    Achja, es soll bei
    <tr>
    <td>'.$row[5].'</td>
    <td>Schauspieler</td>
    </tr>

    ausgegeben werden.


    Dank im Voraus.

    Forennewbie
    Kronic

  • #2
    Nochmal genauer erklären bitte.

    Kommentar


    • #3
      Ok versuche nochmal genauere Erklärung,

      Habe 3 Tabellen:
      Film (Daten),
      Darsteller (Zwischentabelle die beide Tabellen verbindet)
      und Schauspieler (mit allen Schauspielern für alle Filme)

      Dazu folgende Select Anweisung:

      SELECT f.titel, f.spielzeit, f.studio, f.release, f.fsk, s.name
      FROM film f INNER JOIN darsteller d ON f.film_id = d.film_id
      INNER JOIN schauspieler s ON d.darsteller_id = s.darsteller_id";

      Außerdem gibt es eine folgende Eingabefelder

      Filmname -> Textfeld
      Schauspieler -> Textfeld
      Studio -> vorgabe durch vorherige select Anweisung
      Genre -> vorgabe durch vorherige select Anweisung
      FSK -> vorgabe durch vorherige select Anweisung

      Jetzt sollen die in der Select Anweisung stehenden Felder ausgegeben werden.

      Die wird auch gemacht, aber für z.Bsp jeden Schauspieler wird ein kompletter Datensatz ausgeben.

      z.Bsp.

      1. Terminator - United Artist - FSK 18 - SiFi - Arnold Schwarzenegger
      2. Terminator - United Artist - FSK 18 - SiFi - Linda Hamilton

      ich möchte es aber so haben

      1. Terminator - United Artist - FSK 18 - SiFi - Arnold Schwarzenegger, Linda Hamilton

      Jedes dieser rows (Feld) wird in einem seperaten Tabellenfeld ausgegeben.

      Später soll sowas auch für Tonspuren oder Extras ausgeben werden


      Ich hoffe jetzt ist mein Problem es besser dargestellt.

      Dank im Voraus.

      Kronic

      Kommentar


      • #4
        Du könntest die Schauspieler schon innerhalb von MySQL aneinander reihen: GROUP_CONCAT().

        Kommentar


        • #5
          ok werd mal diesem Befehl ausprobieren.
          Aber kann man das nicht auch mit eine for bzw. while schleife realisieren?

          Gruß

          Kronic

          Kommentar


          • #6
            Danke hat super geklappt mit GROUP_CONCAT().

            Habe jetzt aber ein weiteres Problem.

            Also wenn ich das Script starte bzw. wenn ich was in meinen Auswahlfenster eingebe bekomme ich folgende Fehler Meldung.

            Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in D:\xampp\htdocs\film_archiv_test.php on line 230

            Hänge nochmal den Quellcode im hoffentlich fehlerhaften Stück Quellcode an

            Code:
            $query = "SELECT f.titel, f.spielzeit, f.studio, f.release, f.fsk, g.genre, r.reg, fi.inhalt, mm.cover, mm.trailer, 
            			GROUP_CONCAT(distinct s.name SEPARATOR ', ') AS name,
            			GROUP_CONCAT(distinct t.ton SEPARATOR ', ') AS ton,
            			GROUP_CONCAT(distinct so.sonstiges SEPARATOR ', ') AS sonstiges
            			FROM film f INNER JOIN darsteller d ON f.film_id = d.film_id
            			INNER JOIN schauspieler s ON d.darsteller_id = s.darsteller_id
            			INNER JOIN genre g ON f.genre_id = g.genre_id
            			INNER JOIN regisseure r ON f.reg_id = r.reg_id
            			INNER JOIN filminfo fi ON f.kb_id = fi.kb_id
            			INNER JOIN multimedia mm ON f.mm_id = mm.mm_id
            			INNER JOIN audio a ON f.film_id = a.film_id
            			INNER JOIN tonspuren t ON a.ts_id = t.ts_id
            			INNER JOIN extra e ON f.film_id = e.film_id
            			INNER JOIN sonstige so ON e.sons_id = so.sons_id
            			group by d.film_id"; 
            			
            						
            			if ($t!="")
            			{$bed_t="(f.titel like \"%$t%\")"; $query .= " where $bed_t"; $bed++;}
            			else {$bed_t="";}
            
            			if ($s!="")
            			{$bed_s="(s.name like \"%$s%\")"; $query .= " where $bed_s"; $bed++;}
            			else {$bed_s="";}
            			
            			if ($st!="-ALLE-")
            			{$bed_st="(f.studio = \"$st\")";
            			if ($bed>0) {$query .= " AND $bed_st";} 
            			else {$query .= " where $bed_st"; $bed++;}
            			}
            			else {$bed_st="";}
            
            			if ($g!="-ALLE-")
            			{$bed_g="(g.genre = \"$g\")";
            			if ($bed>0) {$query .= " AND $bed_g";} 
            			else {$query .= " where $bed_g"; $bed++;}
            			}
            			else {$bed_g="";}
            
            			if ($f!="-ALLE-")
            			{$bed_f="(f.fsk = \"$f\")";
            			if ($bed>0) {$query .= " AND $bed_f";} 
            			else {$query .= " where $bed_f"; $bed++;}
            			}
            			else {$bed_f="";}
            
            			$result = mysql_query($query);
            
            			echo $query;
            			
            			while($row = mysql_fetch_row($result))
            			{
            							
            			echo
            			'<table width="250" border="1" cellspacing="2" cellpadding="0">
            			<tr>
            				<td>'.$row[0].'</td>
            				<td>Titel</td>
            			</tr>
            			<tr>
            				<td>'.$row[1].'</td>
            				<td>Spielzeit</td>
            			</tr>
            			<tr>
            				<td>'.$row[2].'</td>
            				<td>Studio</td>
            			</tr>
            			<tr>
            				<td>'.$row[3].'</td>
            				<td>Jahr</td>
            			</tr>
            			<tr>
            				<td>'.$row[4].'</td>
            				<td>FSK</td>
            			</tr>
            			<tr>
            				<td>'.$row[5].'</td>
            				<td>Schauspieler</td>
            			</tr>
            			<tr>
            				<td>'.$row[6].'</td>
            				<td>Schauspieler</td>
            			</tr>
            			<tr>
            				<td>'.$row[7].'</td>
            				<td>Schauspieler</td>
            			</tr>
            			<tr>
            				<td>'.$row[8].'</td>
            				<td>Schauspieler</td>
            			</tr>
            			<tr>
            				<td>'.$row[9].'</td>
            				<td>Schauspieler</td>
            			</tr>
            			<tr>
            				<td>'.$row[10].'</td>
            				<td>Schauspieler</td>
            			</tr>
            			<tr>
            				<td>'.$row[11].'</td>
            				<td>Schauspieler</td>
            			</tr>
            			<tr>
            				<td>'.$row[12].'</td>
            				<td>Schauspieler</td>
            			</tr>
            				
            			</table>';
            			}
            			
            	?>
            Ich wäre über solch super Hilfe wie mit dem anderem SQL Befehl dankbar.

            Dank im Voraus.

            Kronic

            Kommentar


            • #7
              PHP-Code:
              $result mysql_query($query) or die("FEHLER: $query verursachte folgenden Fehler: ".mysql_error()); 

              Kommentar


              • #8
                mit dem Befehl
                PHP-Code:
                $result mysql_query($query) or die("FEHLER: $query verursachte folgenden Fehler: ".mysql_error()); 
                kommt folgende Meldung

                FEHLER: SELECT f.titel, f.spielzeit, f.studio, f.release, f.fsk, g.genre, r.reg, fi.inhalt, mm.cover, mm.trailer, GROUP_CONCAT(distinct s.name SEPARATOR ', ') AS name, GROUP_CONCAT(distinct t.ton SEPARATOR ', ') AS ton, GROUP_CONCAT(distinct so.sonstiges SEPARATOR ', ') AS sonstiges FROM film f INNER JOIN darsteller d ON f.film_id = d.film_id INNER JOIN schauspieler s ON d.darsteller_id = s.darsteller_id INNER JOIN genre g ON f.genre_id = g.genre_id INNER JOIN regisseure r ON f.reg_id = r.reg_id INNER JOIN filminfo fi ON f.kb_id = fi.kb_id INNER JOIN multimedia mm ON f.mm_id = mm.mm_id INNER JOIN audio a ON f.film_id = a.film_id INNER JOIN tonspuren t ON a.ts_id = t.ts_id INNER JOIN extra e ON f.film_id = e.film_id INNER JOIN sonstige so ON e.sons_id = so.sons_id group by d.film_id where (f.studio = "") AND (g.genre = "") AND (f.fsk = "") verursachte folgenden Fehler: 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 'where (f.studio = "") AND (g.genre = "") AND (f.fsk = "")' at line 1

                Leider kann ich damit nicht viel anfangen.

                Wäre um weitere Hilfe dankbar.

                Gruß

                Kronic

                Kommentar


                • #9
                  Hallo,

                  habe leider das Problem nicht lösen können.

                  Habe jetzt 2 Eingabefelder erstellt.

                  Variablen
                  $t=$_GET['titel'];
                  $s=$_GET['schauspieler'];
                  $st=$_GET['studio'];
                  $g=$_GET['genre'];
                  $f=$_GET['fsk'];
                  $bed=0;


                  1. Ein Textfeld womit man nach Titel suchen kann
                  mit dazugehöriger If anweisung

                  PHP-Code:
                  if ($t!="")
                  {
                  $bed_t="(f.titel like \"%$t%\")"$query .= " where $bed_t"$bed++;}
                  else {
                  $bed_t="";} 
                  bekomme da folgende Fehlermeldung:

                  FEHLER: SELECT f.titel, f.spielzeit, f.studio, f.release, f.fsk, g.genre, r.reg, fi.inhalt, mm.cover, mm.trailer, GROUP_CONCAT(distinct name SEPARATOR ', ') AS name, GROUP_CONCAT(distinct ton SEPARATOR ', ') AS ton, GROUP_CONCAT(distinct sonstiges SEPARATOR ', ') AS sonstiges FROM film f INNER JOIN darsteller d ON f.film_id = d.film_id INNER JOIN schauspieler s ON d.darsteller_id = s.darsteller_id INNER JOIN genre g ON f.genre_id = g.genre_id INNER JOIN regisseure r ON f.reg_id = r.reg_id INNER JOIN filminfo fi ON f.kb_id = fi.kb_id INNER JOIN multimedia mm ON f.mm_id = mm.mm_id INNER JOIN audio a ON f.film_id = a.film_id INNER JOIN tonspuren t ON a.ts_id = t.ts_id INNER JOIN extra e ON f.film_id = e.film_id INNER JOIN sonstige so ON e.sons_id = so.sons_id group by f.film_id where (f.titel like "%gold%") verursachte folgenden Fehler: 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 'where (f.titel like "%gold%")' at line 1

                  2. ein Auswahlfenster wo man die FSK aussuchen kann

                  PHP-Code:
                  if ($f!="-ALLE-")
                  {
                  $bed_f="(fsk = \"$f\")";
                  if (
                  $bed>0) {$query .= " AND $bed_f";} 
                  else {
                  $query .= " where $bed_f"$bed++;}
                  }
                  else {
                  $bed_f="";} 
                  bekomme da folgende Fehlermeldung: -> sowohl bei start des Scripts bzw. nach Auswahl

                  FEHLER: SELECT f.titel, f.spielzeit, f.studio, f.release, f.fsk, g.genre, r.reg, fi.inhalt, mm.cover, mm.trailer, GROUP_CONCAT(distinct name SEPARATOR ', ') AS name, GROUP_CONCAT(distinct ton SEPARATOR ', ') AS ton, GROUP_CONCAT(distinct sonstiges SEPARATOR ', ') AS sonstiges FROM film f INNER JOIN darsteller d ON f.film_id = d.film_id INNER JOIN schauspieler s ON d.darsteller_id = s.darsteller_id INNER JOIN genre g ON f.genre_id = g.genre_id INNER JOIN regisseure r ON f.reg_id = r.reg_id INNER JOIN filminfo fi ON f.kb_id = fi.kb_id INNER JOIN multimedia mm ON f.mm_id = mm.mm_id INNER JOIN audio a ON f.film_id = a.film_id INNER JOIN tonspuren t ON a.ts_id = t.ts_id INNER JOIN extra e ON f.film_id = e.film_id INNER JOIN sonstige so ON e.sons_id = so.sons_id group by f.film_id where (fsk = "16") verursachte folgenden Fehler: 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 'where (fsk = "16")' at line 1
                  oder
                  near 'where (fsk = "")' at line 1

                  Mir kommt es so vor, als ob man group by und whre nicht zusammen nutzen kann, aber ich brauche beide Befehle.

                  Bin langsam mit meinem Wissen am ende.

                  Der Quellecode für die Selectanweisung sind in meinen Einträgen weiter vorne.
                  Die SQL Anweisung klappt ohne Probleme im XAMPP.

                  Dank im Voraus, für eure Hilfe.

                  Gruß

                  Kronic

                  Kommentar

                  Lädt...
                  X