Einträge mit Zuweisung suchen und Ergebnis mit höchster Übereinstimmung zurückgeben

Einträge mit Zuweisung suchen und Ergebnis mit höchster Übereinstimmung zurückgeben

am 16.09.2004 01:57:56 von David Hennon

Hallo,

erstmal sorry für meinen nichts sagenden Betreff, aber mein Problem ist
genauso komisch.
Da ich schon einiges probiert habe, jedoch überhaupt nicht weiterkomme,
beschreibe ich mal kurz, was ich überhaupt machen möchte.

In einer DB-Tabelle stehen Sätze. Jedem dieser Sätze sind aus einer anderen
Tabelle mal mehr, mal weniger Wörter zugeordnet. Ein Wort kann auch mehreren
Sätzen zugeordnet sein. Es kann auch sein, das zwei Sätzen die selben Wörter
zugeordnet sind.

Meine Abfrage soll so aussehen: Ich gebe einige Wörter ein (als User) und
zurück gegeben werden soll der Satz (bzw. Sätze), der am meisten
Übereinstimmungen der eingegeben und zugeordneten Wörtern habt.

Puh. Ich hoffe, dass ich halbwegs verständlich ist. Eigentlich ist es ja
ganz einfach ... :-)

Die DB-Architektur habe ich mir so vorgestellt:
Tabelle woerter (ID, wort)
Tabelle antworten (ID, antwort)
Tabelle joint (WoerterID, antwortenID)
.... ist das so sinnvoll?

Mein größeres Problem ist eben die SQL Abfrage ... ich hab noch keine gute
Idee, wie sie aussehen könnte. Bin daher für jede Hilfe dankbar!
David

Re: Einträge mit Zuweisung suchen und Ergebnis mit höchster Übereinstimmung zurückgeben

am 16.09.2004 02:37:24 von Niels Braczek

David Hennon schrieb:

> Die DB-Architektur habe ich mir so vorgestellt:
> Tabelle woerter (ID, wort)
> Tabelle antworten (ID, antwort)
> Tabelle joint (WoerterID, antwortenID)
> ... ist das so sinnvoll?

Ja.

> Mein größeres Problem ist eben die SQL Abfrage ... ich hab noch keine
> gute Idee, wie sie aussehen könnte. Bin daher für jede Hilfe dankbar!

Das ist zwar eine MySQL- und keine PHP-Frage, aber... Ansatz
(ungetestet):

$sqlStr = "SELECT a.antwort, COUNT(w.ID) as treffer
FROM joint j
LEFT JOIN antworten a ON j.antwortenID=a.ID
LEFT JOIN woerter w ON j.woerterID =w.ID
WHERE w.wort IN (".implode(',',$words).")";

HTH
Niels

--
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es
eine Interpunktionsnorm. Wenn du deine Programme genauso schlampig
schreibst, solltest du es lieber bleiben lassen.

Re: Einträge mit Zuweisung suchen und Ergebnis mit höchster Übereinstimmung zurückgeben

am 16.09.2004 13:01:25 von David Hennon

> Das ist zwar eine MySQL- und keine PHP-Frage, aber... Ansatz
> (ungetestet):
>
> $sqlStr = "SELECT a.antwort, COUNT(w.ID) as treffer
> FROM joint j
> LEFT JOIN antworten a ON j.antwortenID=a.ID
> LEFT JOIN woerter w ON j.woerterID =w.ID
> WHERE w.wort IN (".implode(',',$words).")";
>
> HTH
> Niels
>

Danke für deine Antwort Niels!
Ich hab das ganze Mal in phpMyAdmin getestet (sollte das dort eigentlich
klappen?!) und bekam diese Meldung:
Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is
illegal if there is no GROUP BY clause

Wer weiß Rat?
Danke! David

Re: Einträge mit Zuweisung suchen und Ergebnis mit höchster Übereinstimmung zurückgeben

am 16.09.2004 15:40:27 von Niels Braczek

David Hennon schrieb:
>> Das ist zwar eine MySQL- und keine PHP-Frage, aber... Ansatz
>> (ungetestet):
>>
>> $sqlStr = "SELECT a.antwort, COUNT(w.ID) as treffer
>> FROM joint j
>> LEFT JOIN antworten a ON j.antwortenID=a.ID
>> LEFT JOIN woerter w ON j.woerterID =w.ID
>> WHERE w.wort IN (".implode(',',$words).")";

> Ich hab das ganze Mal in phpMyAdmin getestet (sollte das dort
> eigentlich klappen?!) und bekam diese Meldung:
> Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP
> columns is illegal if there is no GROUP BY clause

Dann gib doch eine an!
.... GROUP BY a.antwort ...

MfG
Niels

--
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es
eine Interpunktionsnorm. Wenn du deine Programme genauso schlampig
schreibst, solltest du es lieber bleiben lassen.