GROUP BY bringt immer Fehlermeldung
Andreas
- datenbank
0 Christian Kruse
Hallo,
Habe folgende Select Abfrage. Nur kommt immer eine Fehlermeldung
durch das GROUP BY.
Warning: Supplied argument is not a valid MySQL result resource in /var/www/htdocs/andi/scripts/forum/suche_volltext.php on line 66
Was mache ich hier falsch????
$result = mysql_query("SELECT * FROM forum WHERE thema LIKE '%$suche_volltext%' OR inhalt LIKE '%$suche_volltext%' OR antwort LIKE '%$suche_volltext%' GROUP BY thema",$db);
if(mysql_num_rows($result)>0)
{
while($row=mysql_fetch_array($result))
{
$id=$row["id"];
$kategorie=$row["kategorie"];
$thema=$row["thema"];
$datum=$row["datum"];
echo "<tr>";
echo "<td bgcolor="#ffffff" width="150">";
echo $kategorie;
echo "</td>";
echo "<td bgcolor="#ffffff" width="250">";
echo "<a href="antwort.php?thema=$thema&&kategorie=$kategorie">$thema</a>";
echo "</td>";
echo "<td bgcolor="#ffffff" width="100" align="center">";
echo "</td>";
echo "<td bgcolor="#ffffff" width="100" align="center">";
echo ($datum) ? datum($datum) : "";
echo "</td>";
echo "</tr>";
Hallo Andreas,
Warning: Supplied argument is not a valid MySQL result
resource in /var/www/htdocs/andi/scripts/forum/suche_volltext.php on line 66
Die Fehlermeldung ist von PHP, sinnvoll waere die des DBS.
$result = mysql_query("SELECT * FROM forum WHERE thema LIKE '%$suche_volltext%' OR inhalt LIKE '%$suche_volltext%' OR antwort LIKE '%$suche_volltext%' GROUP BY thema",$db);
Oha. Dazu gleich mehrere Sachen: eine Query mit einem
'%blahr%' solltest du immer vermeiden. Das zwingt die DB,
*alle* Datensaetze zu durcharbeiten (full table scan). Dann
solltest du das 'select *' vermeiden. In gewissen DBS bringt
das Probleme mit sich, und ganz sicher vermindert es die
Performance.
Dann hast du eine 'GROUP BY'-Klausel. GROUP BY fasst
Datensaetze zusammen. Das heisst, dass z. B. statt 3 Reihen
nur eine zurueck geliefert wird. Aber woher soll das DBS
wissen, welche der drei Reihen es nehmen soll? Genau, kann
es nicht wissen. Dafuer gibt es die Aggregats-Funktionen (z.
B. COUNT(), MIN(), MAX()). Mit denen beschreibst du dem DBS naeher, welche der drei Reihen du haben willst.
So, und den genauen Fehler kann ich dir ohne Fehlermeldung
leider nicht sagen. Mach mal aus dem 'mysql_query()' ein
'mysql_query() or die(mysql_error());' und gib uns die
Ausgabe.
Gruesse,
CK
Hallo,
Hier die Fehlermeldung von mysql
Can't create/write to file '/root/tmp/#sql5df6_1974_0.MYI' (Errcode: 13)
Hallo,
Habe die Lösung gefunden!
$result = mysql_query("SELECT Max(id) as maxid,Count(id) as zaehler,id,kategorie,thema,datum FROM forum WHERE thema LIKE '%$suche_volltext%' OR inhalt LIKE '%$suche_volltext%' OR antwort LIKE '%$suche_volltext%' GROUP BY thema",$db);
Jetzt noch eine Frage:
Wie soll ich sonst eine DB nach Strings durchsuchen wenn ich
LIKE '%$suche_volltext%' nicht verwenden soll?
Danke
Andreas
Hallo Andreas,
Habe die Lösung gefunden!
Schoen, Glueckwunsch. :)
Jetzt noch eine Frage:
Wie soll ich sonst eine DB nach Strings durchsuchen wenn ich
LIKE '%$suche_volltext%' nicht verwenden soll?
Am besten gar nicht. Eine DB ist nicht fuer Volltextsuche
gedacht. Und im Allgemeinen reicht es, einen Stichwort-Index zu
verwenden. Wenn es doch unbedingt sein muss, kann man auf
datenbankspezifische Loesungen zurueckgreifen (z. B. MySQLs
Fulltext-Index). Von einem LIKE '%blahr%' aber wuerde ich
absolut abraten.
Gruesse,
CK
hallo christian,
danke für Deine rasche hilfe. Werde die Volltextsuche ändern.
Andreas