Andreas: GROUP BY bringt immer Fehlermeldung

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>";

  1. 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

    1. Hallo,
      Hier die Fehlermeldung von mysql

      Can't create/write to file '/root/tmp/#sql5df6_1974_0.MYI' (Errcode: 13)

      1. 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

        1. 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

          1. hallo christian,
            danke für Deine rasche hilfe. Werde die Volltextsuche ändern.

            Andreas