sp_steve Δημοσ. 12 Ιανουαρίου 2012 Δημοσ. 12 Ιανουαρίου 2012 Γειά σας, έχω φτιάξει τον παρακάτω κώδικα: > DELIMITER $ CREATE PROCEDURE INSERT_USERNAME(IN uname NVARCHAR(20)) BEGIN DECLARE name VARCHAR(20); DECLARE catid INT(11); DECLARE count int; SELECT COUNT(*) INTO count FROM recipe WHERE username=uname; WHILE(count>0) DO SELECT username INTO name FROM recipe WHERE username=uname; SELECT cat_id INTO catid FROM recipe WHERE name=uname; SELECT title FROM recipe WHERE cat_id=catid; SET @count=count-1; END WHILE; END $ DELIMITER ; και θέλω να γίνεται το εξής: Δίνω σαν όρισμα ένα username και πρέπει να μου εμφανίζεται κάθε κατηγορία για την οποία ο χρήστης έχει συγγράψει κάποια συνταγή και από κάτω τη λίστα των συνταγών που έχει συγγράψει γι' αυτή την κατηγορία. Όταν κάνω CALL μου βγάζει "Result consisted of more than one row". Γιατί συμβαίνει αυτό? Είναι λάθος το σκεπτικό μου? Αν μπορείτε, βοηθήστε με. Ευχαριστώ
antonl Δημοσ. 12 Ιανουαρίου 2012 Δημοσ. 12 Ιανουαρίου 2012 SELECT username FROM recipe WHERE username=uname; ^ Επιστρέφει μόνο μία εγγραφή; Λογικά επιστρέφει count φορές το username και αυτό φταίει. edit: Δοκίμασε: SELECT distinct username INTO name FROM recipe WHERE username=uname; Αν και μιας το username είναι standard για κάθε call, δε νομίζω καν να χρειάζεται το παραπάνω select statement.
sp_steve Δημοσ. 12 Ιανουαρίου 2012 Μέλος Δημοσ. 12 Ιανουαρίου 2012 SELECT username FROM recipe WHERE username=uname; ^ Επιστρέφει μόνο μία εγγραφή; Λογικά επιστρέφει count φορές το username και αυτό φταίει. edit: Δοκίμασε: SELECT distinct username INTO name FROM recipe WHERE username=uname; Αν και μιας το username είναι standard για κάθε call, δε νομίζω καν να χρειάζεται το παραπάνω select statement. Δεν κάνει τίποτα... πάλι το ίδιο βγάζει... Ο τρόπος που το λύνω πιστεύεις οτι είναι σωστός?
Aztec Δημοσ. 12 Ιανουαρίου 2012 Δημοσ. 12 Ιανουαρίου 2012 Οι γνώσεις μου ειναι απο PL/SQL αλλα δεν βλέπω να διαφέρει και πολύ. Το λάθος προκύπτει γιατί κάνεις select into και το query επιστρέφει περισσότερες απο μία εγγραφες. Και τα δύο into δημιουργουν το πρόβλημα. Το δευτερο μάλιστα χρησιμοποιεί το name και όχι το username για το ιδιο input που δίνεις . Τεσπα Το μόνο που χρείαζεσαι είναι να ανοίξεις ένα cursor με distinct τις κατηγορίες των recipe του πελάτη και μέσα στον cursor να βαράς τo select. Άλλη λογική είναι να ανοίξεις εναν cursor με όλες τις συνταγές ενός χρήστη σορταρισμένες ανα κατηγορία και μέσα να τσεκάρεις αν η κατηγορία είναι η ίδια με την προηγούμενη και αν δεν είναι να τυπώνεις και την αλλαγή της κατηγορίας.
sp_steve Δημοσ. 13 Ιανουαρίου 2012 Μέλος Δημοσ. 13 Ιανουαρίου 2012 (επεξεργασμένο) Οι γνώσεις μου ειναι απο PL/SQL αλλα δεν βλέπω να διαφέρει και πολύ. Το λάθος προκύπτει γιατί κάνεις select into και το query επιστρέφει περισσότερες απο μία εγγραφες. Και τα δύο into δημιουργουν το πρόβλημα. Το δευτερο μάλιστα χρησιμοποιεί το name και όχι το username για το ιδιο input που δίνεις . Τεσπα Το μόνο που χρείαζεσαι είναι να ανοίξεις ένα cursor με distinct τις κατηγορίες των recipe του πελάτη και μέσα στον cursor να βαράς τo select. Άλλη λογική είναι να ανοίξεις εναν cursor με όλες τις συνταγές ενός χρήστη σορταρισμένες ανα κατηγορία και μέσα να τσεκάρεις αν η κατηγορία είναι η ίδια με την προηγούμενη και αν δεν είναι να τυπώνεις και την αλλαγή της κατηγορίας. Τελικά ήθελε cursors. Δουλεύει μια χαρά τώρα. Σε ευχαριστώ πολύ. Επεξ/σία 13 Ιανουαρίου 2012 από sp_steve
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα