Ich verwende ein Tagging-System, um Elemente zu gruppieren. Grundsätzlich füge ich einem Element bestimmte Tags hinzu und kann dann ähnliche Elemente suchen, indem ich die Datenbank nach anderen Elementen durchsuche, die einige oder alle Tags enthalten, und dann die Ergebnisse nach der maximalen Anzahl von Tags für jedes Element sortieren . Hier ist ein Pseudo-Code:Ähnliche Artikel finden Sie, indem Sie nach Artikeln mit max. von ähnlichen Tags
product: id, name, description
tags: id, name
product_tags: id, product_id, tag_id
map = new Map<int product_id, int occurances>
loop product_tags.where(tag_id: [1,2,3]) as |ptag|
map[ptag.product_id]++
end
sort map by max occurrences
return map.top(6)
Meine Frage ist; Wie erstelle ich eine einzelne MySQL-Abfrage, um diese Aufgabe auszuführen? Ich bin auch offen für alternative Methoden, dies zu erreichen.
Hallo und willkommen Überlauf zu stapeln. Hier erwarten wir, dass Sie zuerst selbst darauf gehen und sehen, was passiert. Vielleicht hast du es schon. Was ist passiert, als Sie verschiedene SQL-Abfragen ausprobiert haben? Warum waren Sie mit dem Ergebnis nicht zufrieden? Warum beginnst du nicht damit, all die Teile zu machen, die du bereits kennst, und dann in den schwierigen Teilen ... dann komm zurück zu uns mit den Teilen, an denen du feststeckst, und du kannst es uns zeigen was die Ergebnisse sind, die Sie bekommen und vergleichen Sie mit, was Sie stattdessen erwarten :) –
Ich habe Pseudocode zur Verfügung gestellt, der zeigt, wie ich es gerade jetzt mache. Meine Methode ist jedoch ziemlich ineffizient, da die Sortierung auf dem Server statt in der Datenbank erfolgt. – user3642563
Ich fürchte, es ist wirklich schwer, echte Fehler im Pseudocode zu debuggen ... es ist wie der Versuch, eine verbale Beschreibung Ihres Codes zu debuggen. Wenn Sie SQL tatsächlich ausprobiert haben, fügen Sie bitte das SQL hier ein (bearbeiten Sie Ihre Frage und fügen Sie sie hinzu, weil die Formatierung in Kommentaren schrecklich ist). Dann können wir anfangen, dir zu helfen :) –