2016-04-07 7 views
0

Ich versuche Zeilen mit unterschiedlichen Spalte von "Antwort" zu wählen, aber ich habe Probleme damit. Bitte werfen Sie einen Blick auf meinem Code:Getting distinct nur für eine bestimmte Spalte in mysql

select distinct input,response, 
((response REGEXP '[[:<:]]a[[:>:]]')+(response REGEXP '[[:<:]]have[[:>:]]')+(response REGEXP '[[:<:]]I[[:>:]]')) as wordsFound, 
(LENGTH(response) - LENGTH(REPLACE(response, ' ', ''))+1) AS wordsCount 
FROM allData 
HAVING wordsFound > 0 
order by wordsFound desc, wordsCount asc, rand() LIMIT 30 

Wenn ich Spalte ‚Eingang‘, in der Abfrage entfernen, es funktioniert, aber ich mag auch Spalte ‚Input‘ wählen. Wenn ich stattdessen das distinct-Schlüsselwort neben die Antwort setze, wird stattdessen ein Fehler angezeigt. Was muss ich tun, um sowohl die Spalte "Eingabe" als auch die eindeutige Spaltenantwort zu erhalten?

+0

Wählen Sie distinct (Antwort), Eingabe von ....? Oder nach Antwort gruppieren? – Stuart

Antwort

2

Anstelle von DISTINCT möchten Sie die GROUP BY Klausel verwenden.

select input,response, 
((response REGEXP '[[:<:]]a[[:>:]]')+(response REGEXP '[[:<:]]have[[:>:]]')+(response REGEXP '[[:<:]]I[[:>:]]')) as wordsFound, 
(LENGTH(response) - LENGTH(REPLACE(response, ' ', ''))+1) AS wordsCount 
FROM allData 
GROUP BY response 
HAVING wordsFound > 0 
order by wordsFound desc, wordsCount asc, rand() LIMIT 30 
+0

Beachten Sie, dass, wenn Sie mit diesem in eine andere Datenbank gehen müssen, es neu geschrieben werden muss, da MySQL ziemlich ... unverwechselbare ... Implementierungen von solchen Dingen hat. –

+0

Sehr wahr. GROUP BY und DISTINCT sind ebenfalls langsam. Diese Abfrage sagt mir, es gibt wahrscheinlich einen besseren Weg, es zu tun, aber ohne sein ganzes Schema zu sehen, ist es schwer, Vorschläge zu machen. – Cfreak

+0

/einverstanden ... mit zusätzlichen Zeichen = P –

Verwandte Themen