DB query

Dolphon

Erfahrenes Mitglied
Moin.

Habe Probleme mit diesem Skript. ic weiß nicht warum das falsch ist.

PHP:
<? 
include "config.inc.php"; 


  if (isset($_GET['buchstabe'])) 
     { 
    $buchstabe = $_GET['buchstabe']; 
     } 
  else 
    { 
    $buchstabe = "a"; 
    } 

  $db_connect = mysql_connect( "$db_host", "$db_user", "$db_pass" ); 
    
  mysql_select_db("$db_name", $db_connect); 

  $query  = ("SELECT name FROM movieaction WHERE name LIKE '". $_GET['buchstabe'] ."%' ORDER BY name ASC"); 
  $query2  = ("SELECT name FROM moviedrama WHERE name LIKE '". $_GET['buchstabe'] ."%' ORDER BY name ASC");
  $query3  = ("SELECT name FROM moviethriller WHERE name LIKE '". $_GET['buchstabe'] ."%' ORDER BY name ASC");
  $query4  = ("SELECT name FROM moviefantasy WHERE name LIKE '". $_GET['buchstabe'] ."%' ORDER BY name ASC");
  $query5  = ("SELECT name FROM moviemystery WHERE name LIKE '". $_GET['buchstabe'] ."%' ORDER BY name ASC");
  $query6  = ("SELECT name FROM moviescience WHERE name LIKE '". $_GET['buchstabe'] ."%' ORDER BY name ASC");
  $query7  = ("SELECT name FROM moviezeichentrick WHERE name LIKE '". $_GET['buchstabe'] ."%' ORDER BY name ASC");
  $query8  = ("SELECT name FROM moviekomoedie WHERE name LIKE '". $_GET['buchstabe'] ."%' ORDER BY name ASC"); 

    
  $res = mysql_query($query && $query2 && $query3 && $query4 && $query5 && $query6 && $query7 && $query8) or die(mysql_error()); 


  while ($row = mysql_fetch_array($res)) 
  { 
     echo $row['name'] . "<br>\n"; 
  } 

  mysql_close($db_connect); 
?>
 
"$res = mysql_query($query && $query2 && $query3 && $query4 && $query5 && $query6 && $query7 && $query8)" <-- geht so nicht, da mysql_query immer nur ein Query absetzen kann...

außerdem sind deine Queries insofern falsch, als dass sie immer auf $_GET['buchstabe'] zugreifen, was wiederum deine IF-Abfrage am Anfang des Scripts völlig sinnlos macht...


<?php echo mysql_error(); ?> hilft auch immer bei MySQL-Sachen...

..ansonsten ist deine Fehlerbeschreibung dermaßen genau, das ich leider nicht sagen kann was noch falsch ist...
 
*seuftz*
PHP:
$sql = "SELECT movieaction.name, moviedrama.name";
."FROM movieaction, moviedrama ";
."WHERE movieaction.name LIKE '$buchstabe%'  ";
."AND moviedrama.name LIKE '$buchstabe%'
so fragst du die ersten beiden Tabellen ab, dann musst du dir noch 'ne Schleife bauen, die dir nach dem selben Prinzip eine Query für alle acht Tabellen schreibt...
Oder du schreibst alle Filme in eine Tabelle und fügst ein Feld für's Genre hinzu :p
 
hab deine Idee mal halb aufgegriffen.

PHP:
<? 
include "config.inc.php"; 

  if (isset($_GET['buchstabe'])) 
     { 
    $buchstabe = $_GET['buchstabe']; 
     } 
  else 
    { 
    $buchstabe = "a"; 
    } 

  $db_connect = mysql_connect( "$db_host", "$db_user", "$db_pass" ); 
    
  mysql_select_db("$db_name", $db_connect); 

  $query = "SELECT movieaction.name AS ma_name, moviedrama.name AS md_name FROM movieaction, moviedrama WHERE movieaction.name LIKE '". $_GET['buchstabe'] ."%' AND moviedrama.name LIKE '".$_GET['buchstabe']."%' ORDER BY movieaction.name ASC, moviedrama.name ASC"; 
    
  $res = mysql_query($query) or die(mysql_error()); 

  while ($temp[] = mysql_fetch_array($res)); 
  
  $movies=array_unique($temp); 
  sort($movies); 




 foreach ($movies as $k => $v) { 
   echo $v.'<br>'; 
  } 

  mysql_close($db_connect); 
?>

Nur leider spucktder nur Array aus.
 
Original geschrieben von Dolphon
Nur leider spucktder nur Array aus.

Ja, weil nichts drin steht. Du erzeugst ein mehrdimensionales Array, und schreibst nur in das letzte Element ein neues Array.
Was du vorhattest müsste in etwa so gehen:
PHP:
while($temp = mysql_fetch_array($result)) {
	$tmp[] = $temp['ma_name'];
	$tmp[] = $temp['md_name'];
}
$movies = array_unique($tmp);


foreach ($movies as $movie) { 
	echo $movie.'<br>'; 
}
Bist du wirklich sicher, dass du für dein Vorhaben acht Tabellen brauchst? Was wird dann erst mit komplizierteren Querys?
 
Moin.

Es klappt jetzt einwandfrei.
Ich bräuchte keine 8 Tabbellen, nur dann müsste ich die andren Skripte alle komplett umschreiben, und daruaf hab ich keinen Bock.

Was meinst du wenn ich mal kompliziertere Querys bekomme?
 
Habe das Skript mal getestet, und festegestellt, das es wohl noch nicht ganz fertig ist.

Sobald in einer Tabelle nichts vorhanden ist, spuckt der Fehlermeldung aus.
Mann müsste das so abändern, das er keine Fehelrmeldung auspcukt sondern dann nur den Inhalt der Tabellen indenen etwas vorhanden ist.

Hier einfach mal die Fehlermeldung:

Warning: array_unique() [function.array-unique]: The argument should be an array in /www/htdocs/v079556/templates/movies/test/action/archiv2.php on line 187

Warning: Invalid argument supplied for foreach() in /www/htdocs/v079556/templates/movies/test/action/archiv2.php on line 190
 
Ach ja so als Tipp am Rande, man braucht wirklich keine ACHT tabellen, nur wird das jetzt ein wenig unpraktisch...

Am besten wäre es, alle Filme in eine Tabelle zu packen und eine Spalte namens "genre" hinzuzufügen und einfach die where [OR] -Klausel auf den vom Benutzer eingegeben Suchfilter zu beschränken...
 
ich weiß dat. Ich habe auch bereits ein Spalte Genre, nur wenn ich mit where.. arbeitet, dann muss ich einige Skripte umschreiben, und das dauert dann wieder.
 
klar bekommst du mit dem etwas...äh...geflickschusterten Code Probleme, wenn die Arrays leer/nichtvorhanden sind. Mit is_array() kannst du prüfen, ob eine Varable ein Array ist, mit count() bekommst du raus, wie viele Elemente im Array sind, und damit natürlich auch, ob überhaupt welche drin sind...

Ich denke auch, das du mit einer Tabelle besser bedient bist. Du wirst weniger Zeit darauf verwenden, deine Scripte umzuschreiben, als hier im Forum auf Antworten zu warten, wenn du neuen Code schreiben willst. Außerdem brauchst du dich dann nicht mehr über Leute zu ärgern, die an deinem Database Layout rummeckern :p
 
Zurück