Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Έχουμε δύο db tables:

table_disputes

dispute_id

state (active / resolved)

 

table_disputes_read

dispute_id

user_id

read_date (δε χρειάζεται για το πρόβλημα, απλά το βάζω)

 

Θέλω να εξάγω τον αριθμό για τον επισκέπτη (ας πούμε user_id = 3) των αδιάβαστων active (state) disputes. Αδιάβαστο σημαίνει ότι ο πίνακας table_disputes_read δεν έχει εγγραφή για το συγκεκριμένο pair dispute_id - user_id.

Έχω γράψει αυτό και φαίνεται να δουλεύει, αλλά δεν μου φαίνεται βελτιστοποιημένο (πχ το subquery με τον καιρό θα φορτώνει πολύ με νέες εγγραφές! ).

SELECT COUNT(table_disputes.dispute_id) AS cnt
FROM table_disputes
WHERE table_disputes.dispute_id NOT IN 
							(SELECT d1.dispute_id 
							FROM table_disputes_read AS d1
							WHERE d1.user_id = 3)
	AND table_disputes.state = 'active'

Καμιά ιδέα για βελτιστοποίηση; Σκέφτομαι αμυδρά κάτι σε INNER ή LEFT JOIN και table_disputes_read.dispute_id IS NULL, αλλά δε ξέρω πως να το υλοποιήσω, κάτι προσπάθειες που έκανα δεν δούλεψαν.

Επεξ/σία από philos
Δημοσ. (επεξεργασμένο)

Σκαρφίστηκα αυτό. Φαίνεται να δουλεύει με μερικά test data που έβαλα ;)

SELECT COUNT(d.dispute_id) AS cnt
FROM table_disputes AS d
LEFT JOIN table_disputes_read AS r
			ON (r.dispute_id = d.dispute_id AND r.user_id = 3)
WHERE r.user_id IS NULL AND d.state = 'active'

 

Επεξ/σία από philos

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...