sto trovando questa abbastanza difficile da spiegare quindi per favore nudo con me qui ...Come controllare contro tutti i join quando si genera un punteggio utilizzando MYSQL
Sto usando MySQL per generare un punteggio per ogni risultato restituito da una domanda. I risultati vengono quindi ordinati in base al punteggio.
La parte che non sembra funzionare correttamente è quando sto cercando di aggiungere un punteggio per ogni tag che è stato cercato e il risultato è assegnato a. Quindi diciamo che faccio una ricerca per i tag "esempio", "test" e "tag" e uno dei miei risultati è assegnato ai tag "esempio", "test", "someothertag" dovrebbe venire con un punteggio di 10 dal momento che ci sono 2 partite.
che cosa realmente sta accadendo è che sto ottenendo un punteggio di 5 se v'è una corrispondenza, indipendentemente dal numero di tag sono abbinati. e 0 se nessun tag sono abbinati.
Qui è un esempio di una delle query che viene generato da una ricerca.
SELECT DISTINCT results.*,
(
5*(MATCH(tags.name) AGAINST('"self employed"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"rental income"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"commission income"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"bankruptcy"' IN BOOLEAN MODE)) +
5*(MATCH(tags.name) AGAINST('"condo approval"' IN BOOLEAN MODE)) +
1*usefulness +
10*shares
) AS score
FROM results
INNER JOIN categories c on results.ID = c.RESULT_ID
INNER JOIN tags ON results.id = tags.result_id
WHERE c.name in ('purchase', 'condo', 'va')
AND (tags.name = 'self employed' OR tags.name = 'rental income' OR tags.name = 'commission income' OR tags.name = 'bankruptcy' OR tags.name = 'condo approval' )
AND (results.scope = 'all' OR results.scope = 'hi')
AND published = 1
GROUP BY results.ID
having count(distinct c.c_id) = 3
ORDER BY score DESC
LIMIT 8 OFFSET 0
Probabilmente non è necessario utilizzare un indice di testo completo per controllare i nomi dei tag in questa query. Sarebbe più veloce e più conciso fare solo un confronto diretto sull'eguaglianza. –
Sarà probabilmente più chiaro per le persone se è possibile scrivere lo schema e alcuni dati di esempio per le tabelle e un elenco di ciò che si desidera che la query generi per i dati di esempio. – Mikeb
Il raggruppamento potrebbe provocare perdite di partite. Hai provato ad aggiungere COUNT ai tuoi cinque 5 * (MATCH (tags.name) ... articoli? – nicolas