slevinkelevra Δημοσ. 8 Ιανουαρίου 2018 Δημοσ. 8 Ιανουαρίου 2018 Καλησπέρα και καλή χρονιά. Το ξέρω οτι πρεπει να διατυπωνουμε τα προβληματα μας νηφαλιοι, αλλα εχω απελπιστεί λίγο και θελω βοηθεια. Εχω λοιπον PostgreSQL10 και θελω να φτιαξω queries με πολλά parameters, τα οποια θα ειναι optional. Ο χρηστης μπορει να επιλεξει υποχρεωτικα ονομα περιοχης και μετα μπορει να επιλεξει κάτι (ή και τίποτα) απο τα παρακατω : συμβαν, ημερομηνια συμβαντος, κατηγορια, ημερομηνια κατηγοριας, στιλ. Οποτε : "ολα τα καταστηματα (κατηγορια), που χτιστικαν το 1990 (ημερομηνια κατηγοριας) , με μπαροκ αρχιτεκτονικη (στιλ) , που επιασαν φωτια το 1995 (συμβαν και ημερομηνια του) και βρισκονται στη Γουαδελουπη (ονομα περιοχης)". Το βασικο προβλημα ειναι οτι περιοχη, συμβαν, κατηγορια και στιλ ειναι σε διαφορετικους πινακες, οι οποιοι συνδεονται και με many-to-many , οποτε δεν μπορω να κανω κατι σαν SELECT * FROM mytable WHERE (Event IS NULL OR Event = event) το οποιο ειναι και λαθος γενικοτερα, λογω διαφορας cached plan και αναγκης recompile every single f**king time. Οποτε υποθετω, για τον ιδιο λογω είναι και λαθος να αρχισω να κανω JOIN 4 πινακες χυμαδιο. Θα μπορούσα να βρω το id περιοχης, μιας και ειναι και υποχρεωτικο, αλλα το προβλημα ειναι οτι δε ξερω τι απο τα αλλα 3 επελεξε ο χρηστης για να βρω σε ποιον many-to-many θα το συγκρινω. Ε ουτε ειναι πολυ λογικο να εχω καμια 10 if. Ιδεες, παραδειγματα, tutorial, θεωριες, chow main noodles με λαχανικα και κοτοπουλο και μια κοακολα, ολα ευπροσδεκτα. Eυχαριστω
TheDarkKnight Δημοσ. 8 Ιανουαρίου 2018 Δημοσ. 8 Ιανουαρίου 2018 (επεξεργασμένο) Δοκίμασε να σπάσεις το query σε substrings. Επεξ/σία 8 Ιανουαρίου 2018 από TheDarkKnight
slevinkelevra Δημοσ. 8 Ιανουαρίου 2018 Μέλος Δημοσ. 8 Ιανουαρίου 2018 11 ώρες πριν, TheDarkKnight είπε Δοκίμασε να σπάσεις το query σε substrings. Δηλαδη?...Δωσε ενα παραδειγμα σε παρακαλω , γιατι δε βλεπω τι ακριβως πρεπει να κανω. Thanks
TheDarkKnight Δημοσ. 8 Ιανουαρίου 2018 Δημοσ. 8 Ιανουαρίου 2018 (επεξεργασμένο) String joinPart = ""; String clausePart = ""; if(){ //ελέγχεις αν ο χρήστης έχει επιλέξει κάτι σχετικά με τη κατηγορία joinPart = " INNER JOIN Area-Category ON Area.Id = Area-Category.AreaId INNER JOIN Category ON Area-Category.CategoryId = Category.id "; clausePart = " AND Category.Id = :catid"; } if(){ //ελέγχεις αν ο χρήστης έχει επιλέξει κάτι σχετικά με το στυλ joinPart = " INNER JOIN Area-Category ON Area.Id = Area-Category.AreaId INNER JOIN Category ON Area-Category.CategoryId = Category.Id INNER JOIN Style-Category ON Category.Id = Style-Category.CategoryId INNER JOIN Style ON Style-Category.StyleId = Style.Id "; clausePart += " AND Style.id = :stylid"; } String query = "SELECT * FROM Event INNER JOIN Area-Event ON Event.Id = Area-Event.EventId INNER JOIN Area ON Area-Event.AreaId = Area.Id" + joinPart + "WHERE Area.Id = :arid" + clausePart; Επεξ/σία 8 Ιανουαρίου 2018 από TheDarkKnight 1
slevinkelevra Δημοσ. 9 Ιανουαρίου 2018 Μέλος Δημοσ. 9 Ιανουαρίου 2018 Σε ευχαριστω γιατην απαντηση φιλε μου, καταλαβα τι εννοουσες με το "substrings". Δε το ξεχναω το θεμα, απλα το ψαχνω λιγο με dynamic sql γιατι με static και joins εχει τα προβληματα που αναφερα στην αρχη. Dynamic sql δεν εχω ξαναφτιαξει, οποτε θα μου παρει λιγο καιρο και ελπιζω να επανελθω με καποια προταση σχετικη.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα