SQL σε δυο πινακες

Γενικές συζητήσεις για SQL και SQL Servers (RDBMS)

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
dephjam
Δημοσιεύσεις: 7
Εγγραφή: 15 Φεβ 2005 17:59

SQL σε δυο πινακες

Δημοσίευση από dephjam » 11 Φεβ 2008 17:30

Φίλοι,
εχω δυο πινακες πχ.

Πινακας users:
id name
1 Μήτσος
2 Λάζαρος

Πινακας actions:
id user_id action
1 1 register
2 1 delete
3 2 delete
4 1 delete

και θελω SELECT που να ψαχνει την τελευταια εγγραφη του καθε user στον πινακα actions να δει αν ειναι action='delete'.

Θα επιστρεφει δηλαδη
users.id, users.name, actions.id, actions.action
όπου actions.action='delete'. Ομως να ελεχγει μονο την τελευται εγγραφη του καθε user απο τον actions και οχι ολες.

Ευχαριστώ που ήδη έχετε διαβάσει ως εδώ...

Άβαταρ μέλους
dik_
Δημοσιεύσεις: 476
Εγγραφή: 07 Ιουν 2007 11:28

SQL σε δυο πινακες

Δημοσίευση από dik_ » 11 Φεβ 2008 18:22

Κώδικας: Επιλογή όλων

SELECT * FROM users
INNER JOIN actions ON users.id=actions.user_id
ORDER BY actions.id DESC
LIMIT 1
Αν αποθηκεύεις timestamp τότε κάνε order βάσει του timestamp αντί του id...

dephjam
Δημοσιεύσεις: 7
Εγγραφή: 15 Φεβ 2005 17:59

SQL σε δυο πινακες

Δημοσίευση από dephjam » 11 Φεβ 2008 21:12

dik_ έγραψε:

Κώδικας: Επιλογή όλων

SELECT * FROM users
INNER JOIN actions ON users.id=actions.user_id
ORDER BY actions.id DESC
LIMIT 1
Αν αποθηκεύεις timestamp τότε κάνε order βάσει του timestamp αντί του id...
Ευχαριστω dik_,

αλλα ετσι επιστρεφει ενα μονο αποτελεσμα.

Κατι σαν

SELECT * FROM users AS us LEFT JOIN (SELECT * FROM actions AS act WHERE us.id=act.user_id LIMIT 1) WHERE act.action='delete'

αλλα δεν δουλευει.
Thanks again.

Άβαταρ μέλους
dik_
Δημοσιεύσεις: 476
Εγγραφή: 07 Ιουν 2007 11:28

SQL σε δυο πινακες

Δημοσίευση από dik_ » 11 Φεβ 2008 21:25

Ομως να ελεχγει μονο την τελευται εγγραφη του καθε user απο τον actions και οχι ολες.
αλλα ετσι επιστρεφει ενα μονο αποτελεσμα.
Με μπέρδεψες... αν θέλεις την τελευταία action που είναι και delete, τότε:

Κώδικας: Επιλογή όλων

SELECT * FROM users
INNER JOIN actions ON users.id=actions.user_id
WHERE action='delete'
ORDER BY actions.id DESC
LIMIT 1

dephjam
Δημοσιεύσεις: 7
Εγγραφή: 15 Φεβ 2005 17:59

SQL σε δυο πινακες

Δημοσίευση από dephjam » 12 Φεβ 2008 03:08

Θελω ενα SQL που να επιστρεφει πχ τους 'delete΄ users. Ο user με id=2 ειναι deleted όπως και ο user με id=1 αφου η εγγραφη με id=4 στον πίνακα action είναι νεότερη από την εγγραφή με id=1 στον ιδιο πίνακα που δηλώνει τον user με id=2 ως registered. Ομοίως τo SQL που ψάωνει τους registered, δεν φέρνει αποτελεσματα γιατι στον πίνακα actions υπάρχει νεότερη εγγραφή για τον user 1 που ακυρώνει την εγγραφή με id=1 που τον δηλώνει ως registered.
Το καταλαβε κανεις ή μόνο εγώ;

thanks

Απάντηση

Επιστροφή στο “Βάσεις Δεδομένων και SQL - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες