großes Problem mit SQL-Abfrage

evoleena

Erfahrenes Mitglied
Hallo Leute

Ich komm hier nicht mehr weiter so richtig weiß ich nicht mehr wo vorne und hinten ist.
Ich hoffe ihr könnt ein wenig zeit opfern und mir vielleicht helfen.
Ich hab die dazu benötigten Tabellen mal als bild hinterlegt findet ihr unter dem Link
http://mitglied.lycos.de/flamira/buchdb.gif

So nun zu meinem Problem
es geht im großen und ganzen um eine Suche dabei kann der nutzer nach einen
titel,
autornamen oder
autorvorname
suchen kann. das bekomme ich noch hin das das geht, nun sollen aber nur die buecher angezeigt werden,die dem angemeldeten benutzers gehören.
Und das bekomme ich nicht hin.

ich hoffe ihr könnt mich eingermaßen verstehen
die benutzer_id habe ich gegeben

so richtig weiß ich mittlerweile auch nicht mehr mit was ich anfangen soll.
vielleicht habt ihr einen tip was sinnvoll wäre, da ich momentan nicht wirklich eine SQL anweisung zeigen könnte weil ich so durcheinandergekommen bin.

dies hier ist die ursprünglich, die alle ergebnisse anzeigt, die mit hilfe der eingabe gefunden werden. Dabei fehlt jetzt nur noch das mit dem Besitzer
PHP:
'SELECT autor.name, autor.vorname, buch.titel
FROM buch,autor 
WHERE titel like "%'.$titel.'" 
OR autor.name like "%'.$name.'" 
OR autor.vorname like "%'.$vorname.'"'

Gruß
Evo
 
Hi,
du brauchst dafür einen join ich probiers mal mit der "alten" Schreibweise:
Code:
'SELECT DISTINCT autor.name, autor.vorname, buch.titel
FROM buch_besitzer, buch,autor 
WHERE 
buch_besitzer.id = $angemeldeteuserid
AND buch_besitzer.buch_id = buch.buch_id
AND (buch.titel like "%'.$titel.'" 
OR autor.name like "%'.$name.'" 
OR autor.vorname like "%'.$vorname.'"')
So in etwa sollte es gehen, dass du den bezug von Beutzer auf Buch bekommst
 
Hallo Danke für den Tip mit dem Join
So ganz funktioniert es doch noch nicht, die Suche funktioniert nicht mehr.
Wenn ich einfach auf suchen drücke kommen nur die Bücher von dem Benutzer das ist in Ordnung.
Wenn ich nun aber einen titel suche. Geht das nicht mehr er zeigt alles an ;(


So siehts jetzt aus

PHP:
SELECT autor.name, autor.vorname, buch.titel, buch.buch_id
			  FROM autor, buch
			  LEFT JOIN buch_besitzer
			  ON buch_besitzer.buch_id = buch.buch_id 
			  WHERE buch_besitzer.besitzer_id = "'.$besitzer_id['besitzernr'].'"
			  AND buch.autor = autor.autornr
			  AND (buch.titel like "%'.$titel.'" 
			  OR autor.name like "%'.$name.'" 
			  OR autor.vorname like "%'.$vorname.'")
Gruß
Evo
 
Zuletzt bearbeitet:
Hallo Leute ich habe nun die Anweisung geteilt siehe Quelltext, aber habt ihr Idee für optimierung, da die Abfrage doch recht langsam ist

PHP:
$abfrage = mysql_db_query($db_buecher,
'SELECT autor.vorname, autor.name, buch.titel, buch.cover , buch.buch_id
         FROM buch,autor 
         Left Join buch_besitzer
         on buch_besitzer.buch_id = buch.buch_id
         WHERE titel like "%'.$titel.'"
         AND buch.autor = autor.autornr
         AND autor.name like "%'.$name.'"
         AND autor.vorname like "%'.$vorname.'"
         And buch_besitzer.besitzer_id = "'.$besitzer_id['besitzernr'].'"
		  ');
                	
    	while($result = mysql_fetch_array($abfrage))
    	{
			  $select=mysql_db_query($db_buecher,
'SELECT autor.name, autor.vorname, buch.titel, buch.buch_id
			  FROM autor 
			  Left JOIN buch on buch.autor = autor.autornr
			  LEFT JOIN buch_besitzer
			  ON buch_besitzer.buch_id = buch.buch_id 
			  WHERE buch_besitzer.besitzer_id = "'.$besitzer_id['besitzernr'].'"
			  AND buch_besitzer.buch_id = "'.$result['buch_id'].'"
			  ORDER BY autor.name');
			  
			 $daten=mysql_fetch_array($select);
             echo"
			 <td>
              ".$daten['name'].", ".$daten['vorname']."
             </td>
             <td>
              ".$daten['titel']."
             </td>
             <td align='center'>
              <a href='index-verwalt.php?section1=buch_bearbeiten.php&buch=".$daten['buch_id']."'>
              <img src='bearbeiten.jpg'></a>
             </td>
            <tr>";
        }
        echo"</table></form>";

LG
Evo
 
Zuletzt bearbeitet:
Zurück