Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας,

 

έχω φτιάξει τον παρακάτω κώδικα:

>
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".

Γιατί συμβαίνει αυτό? Είναι λάθος το σκεπτικό μου? Αν μπορείτε, βοηθήστε με.

 

Ευχαριστώ

Δημοσ.

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.

Δημοσ.

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.

 

Δεν κάνει τίποτα... πάλι το ίδιο βγάζει...

Ο τρόπος που το λύνω πιστεύεις οτι είναι σωστός?

Δημοσ.

Οι γνώσεις μου ειναι απο PL/SQL αλλα δεν βλέπω να διαφέρει και πολύ.

 

Το λάθος προκύπτει γιατί κάνεις select into και το query επιστρέφει περισσότερες απο μία εγγραφες. Και τα δύο into δημιουργουν το πρόβλημα. Το δευτερο μάλιστα χρησιμοποιεί το name και όχι το username :whistle: για το ιδιο input που δίνεις . Τεσπα

 

Το μόνο που χρείαζεσαι είναι να ανοίξεις ένα cursor με distinct τις κατηγορίες των recipe του πελάτη και μέσα στον cursor να βαράς τo select.

 

Άλλη λογική είναι να ανοίξεις εναν cursor με όλες τις συνταγές ενός χρήστη σορταρισμένες ανα κατηγορία και μέσα να τσεκάρεις αν η κατηγορία είναι η ίδια με την προηγούμενη και αν δεν είναι να τυπώνεις και την αλλαγή της κατηγορίας.

Δημοσ. (επεξεργασμένο)

Οι γνώσεις μου ειναι απο PL/SQL αλλα δεν βλέπω να διαφέρει και πολύ.

 

Το λάθος προκύπτει γιατί κάνεις select into και το query επιστρέφει περισσότερες απο μία εγγραφες. Και τα δύο into δημιουργουν το πρόβλημα. Το δευτερο μάλιστα χρησιμοποιεί το name και όχι το username :whistle: για το ιδιο input που δίνεις . Τεσπα

 

Το μόνο που χρείαζεσαι είναι να ανοίξεις ένα cursor με distinct τις κατηγορίες των recipe του πελάτη και μέσα στον cursor να βαράς τo select.

 

Άλλη λογική είναι να ανοίξεις εναν cursor με όλες τις συνταγές ενός χρήστη σορταρισμένες ανα κατηγορία και μέσα να τσεκάρεις αν η κατηγορία είναι η ίδια με την προηγούμενη και αν δεν είναι να τυπώνεις και την αλλαγή της κατηγορίας.

Τελικά ήθελε cursors. Δουλεύει μια χαρά τώρα.

Σε ευχαριστώ πολύ.

Επεξ/σία από sp_steve

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...