La query dovrebbe (non sono mai stato un drago con le query) essere questa (che purtroppo restituisce lo stesso risultato due volte, nel senso che, per fare un esempio, la coppia di topic correlati 3-5, viene restituita sia come |3||5|, che come |5||3|.. , domani chiedo a una persona più in gamba di me come si può ovviare ):
Codice: Seleziona tutto
SELECT t1.id AS "id topic 1", t2.id AS "id topic 2"
FROM topic t1, topic t2
WHERE ((SELECT COUNT(*)
FROM utente) / 20) < (SELECT COUNT(*)
FROM utente u
WHERE t1.id IN (SELECT t.id
FROM bacheca b, foto f, contenimento_foto_board cont, appartenenza_foto_topic app, topic t
WHERE b.email_utente = u.email &&
cont.id_bacheca = b.id &&
cont.id_foto = f.id &&
app.id_foto = f.id &&
app.id_topic = t.id) &&
t2.id IN (SELECT t.id
FROM bacheca b, foto f, contenimento_foto_board cont, appartenenza_foto_topic app, topic t
WHERE b.email_utente = u.email &&
cont.id_bacheca = b.id &&
cont.id_foto = f.id &&
app.id_foto = f.id &&
app.id_topic = t.id)) &&
t1.id != t2.id
PPS: mi sono appena accorto che nella definizione delle tabelle appartenenza_foto_topic e correlazione_topic ho fatto un erroraccio dovuto a copia-incolla (la maledizione dei programmatori ): i vari campi id (foto e topic) non sono auto_increment
PPPS: sì in effetti, ora che ci penso, se un dato è calcolabile utilizzando i dati già presenti nel database, allora non andrebbe inserito nel database stesso.. anche se bisognerebbe vedere come va interpretato quel "per ogni topic vengono sengalati topic simili..." della consegna