philos Δημοσ. 12 Ιουνίου 2023 Δημοσ. 12 Ιουνίου 2023 (επεξεργασμένο) Έχουμε δύο 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, αλλά δε ξέρω πως να το υλοποιήσω, κάτι προσπάθειες που έκανα δεν δούλεψαν. Επεξ/σία 12 Ιουνίου 2023 από philos
philos Δημοσ. 12 Ιουνίου 2023 Μέλος Δημοσ. 12 Ιουνίου 2023 (επεξεργασμένο) Σκαρφίστηκα αυτό. Φαίνεται να δουλεύει με μερικά 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' Επεξ/σία 12 Ιουνίου 2023 από philos
Predatorkill Δημοσ. 14 Ιουνίου 2023 Δημοσ. 14 Ιουνίου 2023 Ρωτα και το chatgpt, εχω παρατηρησει οτι σε sql δινει καλα αποτελεσματα 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα