• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MySQL Abfrage in PHP

Status
Für weitere Antworten geschlossen.

csigg

Neues Mitglied
Hallo

ich hab ne sql-abfrage in PHP, aber mein Server hängt, wenn ich diese ausführe. Sitz jetzt 2Tage davor und finde einfach keinen Fehler.
PHP:
<?

 $verbindung = mysql_connect("XX",
  "XX","XX") or die
  ("Keine Verbindung moeglich");
  mysql_select_db("cc") or die
  ("Die Datenbank existiert nicht");
    
    

    
                $abfrage = "SELECT DISTINCT Rezepte.ID, Rezepte.Name, Rezepte.Beschreibung FROM Rezepte, Zutaten ". 
                           "WHERE Rezepte.ID IN (select Rezept_ID from Zutaten WHERE Name LIKE '%$zutat1%') ".
                           "AND Rezepte.ID IN (select Rezept_ID from Zutaten WHERE Name LIKE '%$zutat2%') ".         
                           "AND Rezepte.ID IN (select Rezept_ID from Zutaten WHERE Name LIKE '%$zutat3%') ".         
                           "AND Rezepte.ID IN (select Rezept_ID from Zutaten WHERE Name LIKE '%$zutat4%') ".
                           "AND Rezepte.ID IN (select Rezept_ID from Zutaten WHERE Name LIKE '%$zutat5%')".
                           "Limit 0,30";     
                                
                                
            
            
         
        
            $ergebnis = mysql_query($abfrage) or die ("Fehler"); 
            echo '<h2>Ergebnisse</h2>';
            echo '<table width="400">';
            $i = 0;
            while($row = mysql_fetch_object($ergebnis)) 
            {
                $id = $row->ID;
                $name = $row->Name;
                $beschreibung = $row->Beschreibung;
                echo '<tr>';
                 echo '    <td width="200">'.$name.'</td>';
                 echo '     <td width="200">'.$beschreibung.' -> <a href="suche_erg2.php?id='.$id.'">mehr</a></td>';
                  echo '</tr>';
                $i++;
         } 
            echo '</table>';
            echo '<br />';
            echo 'Suche ergab '.$i.' Ergebnisse';

             
mysql_close($verbindung); 

?>

der Porzeß steht dabei in phpMyADmin immer auf Sending Data
 
Zuletzt bearbeitet von einem Moderator:
Sowas ist zwar möglich, dann braucht aber der MySQL-Server extrem lange, um alle SELECTs zu machen.

Besser wäre eine Zusammenführung der einzelnen Statements.

PHP:
<?php
$sql = "SELECT Rezept_ID FROM Zutaten WHERE Name LIKE '%$zutat1%' OR Name LIKE '%$zutat2%' OR ...";

$qry = mysql_query($sql);
while($fetch = mysql_fetch_assoc($qry)) {
  $rez = mysql_query("SELECT ID, Name, Beschreibung FROM Rezepte WHERE Rezept_ID='$fetch[Rezept_ID]'");
  if(mysql_num_rows($rez) > 0) {
    while($rezept = mysql_fetch_assoc($rez)) {
      echo $rezept['Name'].'<br />';
    }
  } else {
    echo 'Kein Rezept vorhanden.';
  }
}
?>
 
Subqueries sind für die Datenbank absolut kein Problem. Sie sind keine Performancewunder aber funktionieren wunderbar.
Wenn man eine gute Datenstrucktur hat sollten sie sich aber in jedem Fall vermeiden lassen.
Das was im vorliegdenden Fall hilf wäre wohl ein Join:
PHP:
$sql = "
SELECT DISTINCT Rezepte.ID, Rezepte.Name, Rezepte.Beschreibung
FROM Rezepte AS R
LEFT JOIN Zutaten AS Z ON Z.Rezept_ID=R.ID
WHERE Z.Name LIKE '%" . $zutat1 . "%'
AND Z.Name LIKE '%" . $zutat2 . "%'
...
LIMIT 0,30";
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben