philos Δημοσ. 26 Δεκεμβρίου 2013 Δημοσ. 26 Δεκεμβρίου 2013 Λοιπόν, έχουμε έναν υποθετικό πίνακα με columns contenttypeid και extradata.Θέλω να συντάξω μια WHERE στο MySQL query που τραβάει τον πίνακα, η οποία:"Αν το contenttypeid είναι 17 ΚΑΙ το extradata 2, τότε να μην τα επιλέγει το query".Να σημειωθεί ότι κάποια άλλα contenttypeid μπορεί να έχουν επίσης extradata = 2. Με μπερδεύει γιατί έχω να κάνω το αντίθετο από το να μην τα τράβαγα (πχ contenttypeid != 17 AND extradata != 2) και υπό συνθήκες ότι δεν παίρνει την ίδια τιμή extradata άλλο ctid.Ευχαριστώ
Moderators Kercyn Δημοσ. 26 Δεκεμβρίου 2013 Moderators Δημοσ. 26 Δεκεμβρίου 2013 SELECT * FROM table WHERE contenttypeid != 17 AND extradata != 2 Αυτό που έγραψες είναι σωστό. Δε σου δουλεύει;
defacer Δημοσ. 26 Δεκεμβρίου 2013 Δημοσ. 26 Δεκεμβρίου 2013 Δεν είναι σωστό. Αυτό που θέλεις είναι "WHERE ctid != 17 OR extradata != 2", δηλαδή: "να επιλεγεί το row εαν είτε το ctid δεν είναι 17, είτε το extradata δεν είναι 2". Αυτό θα αποκλείσει μόνο τα rows όπου όντως έχουμε 17 και 2, όπως θέλεις. Γενικά θα σε βοηθήσει σε παρόμοιες περιπτώσεις να έχεις υπόψη τους νόμους του DeMorgan: θέλεις το "not (ctid = 17 and extradata = 2)", το οποίο γίνεται "(not ctid = 17) or (not extradata = 2)" κατά τον πρώτο νόμο.
Moderators Kercyn Δημοσ. 26 Δεκεμβρίου 2013 Moderators Δημοσ. 26 Δεκεμβρίου 2013 Έχει δίκιο ο defacer, το κοίταξα κάπως επιπόλαια...
cyclo Δημοσ. 28 Δεκεμβρίου 2013 Δημοσ. 28 Δεκεμβρίου 2013 να προτίνω κάτι για πιο αλήτες.. WHERE NOT ( contenttypeid = 17 AND extradata = 2 )
ZAKKWYLDE Δημοσ. 29 Δεκεμβρίου 2013 Δημοσ. 29 Δεκεμβρίου 2013 Δεν είναι σωστό. Αυτό που θέλεις είναι "WHERE ctid != 17 OR extradata != 2", δηλαδή: "να επιλεγεί το row εαν είτε το ctid δεν είναι 17, είτε το extradata δεν είναι 2". Αυτό θα αποκλείσει μόνο τα rows όπου όντως έχουμε 17 και 2, όπως θέλεις. Γενικά θα σε βοηθήσει σε παρόμοιες περιπτώσεις να έχεις υπόψη τους <a data-ipb="nomediaparse" data-cke-saved-href="http://en.wikipedia.org/wiki/De_Morgan" href="http://en.wikipedia.org/wiki/De_Morgan" s_laws"="">νόμους του DeMorgan: θέλεις το "not (ctid = 17 and extradata = 2)", το οποίο γίνεται "(not ctid = 17) or (not extradata = 2)" κατά τον πρώτο νόμο. Δεν θα ήταν καλύτερα (πιο κατανοητό δλδ) κατα τον DeMorgan να το γραψει "not (ctid=17 AND extradata=2)";
philos Δημοσ. 29 Δεκεμβρίου 2013 Μέλος Δημοσ. 29 Δεκεμβρίου 2013 Παιδιά δουλεύει μια χαρά το: WHERE NOT ( contenttypeid = 17 AND extradata = 2 ) ήταν πολύ εύκολο, απλά είχα κολλήσει στο να βάζω != και δεν ήξερα πως να εξαιρέσω ολόκληρη συνθήκη. Ευχαριστώ πολύ!!
defacer Δημοσ. 29 Δεκεμβρίου 2013 Δημοσ. 29 Δεκεμβρίου 2013 Δεν θα ήταν καλύτερα (πιο κατανοητό δλδ) κατα τον DeMorgan να το γραψει "not (ctid=17 AND extradata=2)"; Τι να σου πω, περι ορέξεως... εμένα μου φαίνονται πιο κατανοητές οι μορφές στις οποίες το NOT δεν πάει σε σύνθετες συνθήκες παρά μόνο σε απλές. Το βλέπω σαν πιο άμεσα αντιληπτό.
cyclo Δημοσ. 30 Δεκεμβρίου 2013 Δημοσ. 30 Δεκεμβρίου 2013 Τι να σου πω, περι ορέξεως... εμένα μου φαίνονται πιο κατανοητές οι μορφές στις οποίες το NOT δεν πάει σε σύνθετες συνθήκες παρά μόνο σε απλές. Το βλέπω σαν πιο άμεσα αντιληπτό. και εμένα το ίδιο φίλε defacer, απλώς η περιγραφή του προβλήματος ήταν τέτοια που με έσπρωξε προς τα εκεί.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα