Dobio sam ideju kako bi se moglo napisati nešto slično što je zamislio nK a bez upotrebe pod-upita:
Kôd:
# DDL
CREATE TABLE `entry_tags` (
`entry_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL,
PRIMARY KEY (`entry_id`,`tag_id`)
);
Kôd:
# Upit
SELECT b.entry_id, COUNT(*) as score FROM entry_tags a
JOIN entry_tags b ON
a.tag_id = b.tag_id AND
a.entry_id = 1 # entry_id za koji trazimo slicne unose
GROUP BY b.entry_id
HAVING b.entry_id != 1 # entry_id za koji trazimo slicne unose
ORDER BY COUNT(*) DESC;
Velika mana ovog rešenja je to što u obzir uzima samo presek skupova ali ne i njihovu razliku.
Bolje rešenje bi bilo tipa +2 "glasa" za svaki tag koji se nalazi u oba unosa (referentni i onaj koji se trenutno poredi s njim) i -1 "glas" za svaki tag koji se ne nalazi u nekom od ta 2 unosa - i na kraju se rezultati sortiraju po sumi.