xristos05 Δημοσ. 14 Ιανουαρίου 2013 Δημοσ. 14 Ιανουαρίου 2013 Μια ερωτησηεχω αυτο το sql querySELECT c.id, c.title, step2, (SELECT count(*) FROM products AS p WHEREp.step3_id LIKE '%;c.id;%' AND p.enabled='1' ) AS count FROM pro_step3AS c WHERE c.enabled = '1' ORDER BY c.order_numαλλα το count που ζηταω μου το φερνει 0 ενω κανονικα θα επρεπε να δουλευει και να φερνει διαφορα αποτελεσματα υπαρχει καμια λυση ??
mad-proffessor Δημοσ. 15 Ιανουαρίου 2013 Δημοσ. 15 Ιανουαρίου 2013 Ψάξε για nested queries, η παρένθεση θα μπει μετα το in στη σύνταξη του ερωτήματος σου. Δε ξέρω και το σχήμα της βάσης σου οπότε..θα πρέπει να το διορθώσεις λίγο.
defacer Δημοσ. 15 Ιανουαρίου 2013 Δημοσ. 15 Ιανουαρίου 2013 Αν περιμένεις ότι το %;c.id;% θα αντικαθίσταται με την τιμή του c.id από το εξωτερικό query, δεν πρόκειται. Αυτό που πας να κάνεις στην SQL γίνεται με joins, κάτι που έχει τελείως διαφορετική λογική απ' αυτό που έφερες στο μυαλό σου. Google it.
xristos05 Δημοσ. 16 Ιανουαρίου 2013 Μέλος Δημοσ. 16 Ιανουαρίου 2013 -- products -- CREATE TABLE IF NOT EXISTS `products` ( `id` int(11) NOT NULL AUTO_INCREMENT, `step1_id` int(11) NOT NULL, `step2_id` int(11) NOT NULL, `step3_id` text COLLATE utf8_unicode_ci NOT NULL, `title_el` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `order_num` int(11) NOT NULL, `enabled` tinyint(4) NOT NULL PRIMARY KEY (`id`), KEY `step1_id` (`step1_id`), KEY `step2_id` (`step2_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; INSERT INTO `products` (`id`, `step1_id`, `step2_id`, `step3_id`, `title_el`, `order_num`, `enabled`) VALUES (187, 2, 5, ';5;6;', 'SWATS', 1, 1), -- pro_step3 -- CREATE TABLE IF NOT EXISTS `pro_step3` ( `id` int(11) NOT NULL AUTO_INCREMENT, `step2` int(11) NOT NULL, `title_el` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `order_num` int(11) NOT NULL, `enabled` tinyint(4) NOT NULL, PRIMARY KEY (`id`), KEY `step2` (`step2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; SELECT c.id, c.title_el AS title, c.step2, p.count(*) AS count FROM pro_step3 AS c, products AS p WHERE c.enabled = '1' AND p.step3_id LIKE '%;c.id;%' ORDER BY c.order_num Βεβαια αυτο δε δουλευει Εγω θελω να διαβασω απο τη βαση τις κατηγοριες (step3) και να εμφανισω ποσα προιοντα εχει η καθε μια αλλα ενα προιον μπορει να ανοικει σε 2 κατηγοριες
defacer Δημοσ. 16 Ιανουαρίου 2013 Δημοσ. 16 Ιανουαρίου 2013 Η βάση σου έχει λάθος σχήμα γι' αυτό που αντιπροσωπεύει. Ψάξε να δεις πώς υλοποιούνται many-to-many (1 προϊόν μπορεί να είναι σε πολλές κατηγορίες και 1 κατηγορία έχει πολλά προϊόντα) σχέσεις σε SQL, π.χ. δες εδώ. Επίσης κι αυτό που κάνεις με τα step1, step2, step3 δεν είναι ορθόδοξο -- δεν ξέρω αν έχει φτάσει ή αν θα φτάσει κάποτε να βγει στην επιφάνεια σαν πρόβλημα, αλλά σίγουρα δεν είναι για καλό.
xristos05 Δημοσ. 17 Ιανουαρίου 2013 Μέλος Δημοσ. 17 Ιανουαρίου 2013 γιατι εχει λαθος ? τα step1, step2 step3 ειναι η κατηγορια, υποκατηγορια και υπουποκατηγορια και εχω και step4 που ειναι υπουπουποκατηγορια γιαυτο τα ειπα ετσι "(1 προϊόν μπορεί να είναι σε πολλές κατηγορίες και 1 κατηγορία έχει πολλά προϊόντα)" τωρα ενα προιον μπορει να ανηκει σε μια κτηγορια (step1) σε μια υποκατηγορια (step2) αλλα σε 2 η οσες θελει υπουποκατηγοριες step3
defacer Δημοσ. 17 Ιανουαρίου 2013 Δημοσ. 17 Ιανουαρίου 2013 γιατι εχει λαθος ? τα step1, step2 step3 ειναι η κατηγορια, υποκατηγορια και υπουποκατηγορια και εχω και step4 που ειναι υπουπουποκατηγορια γιαυτο τα ειπα ετσι "(1 προϊόν μπορεί να είναι σε πολλές κατηγορίες και 1 κατηγορία έχει πολλά προϊόντα)" τωρα ενα προιον μπορει να ανηκει σε μια κτηγορια (step1) σε μια υποκατηγορια (step2) αλλα σε 2 η οσες θελει υπουποκατηγοριες step3 Ναί όλα αυτά είναι κατανοητά μετά από το σχήμα της βάσης που έκανες post. Λάθος έχει γιατί... έτσι . Δεν είμαι σίγουρος αν μπορώ να σου εξηγήσω, σου λείπουν απαραίτητες πληροφορίες οι οποίες παίρνονται με διάβασμα. Το μόνο σίγουρο είναι πως αν δεν υλοποιήσεις τη σχέση προϊόντων-κατηγοριών όπως πρέπει τότε αυτό που θέλεις γίνεται με πολύ περισσότερο κόπο ή απλά δεν γίνεται. Για τη δομή των κατηγοριών: όταν έχεις μια ιεραρχική δομή (όπως αυτή με τις κατηγορίες) αυτή συνήθως υλοποιείται είτε με adjacency lists είτε με nested sets, μπορείς να διαβάσεις περισσότερα εδώ. Αυτό που κάνεις είναι η προφανής προσέγγιση κάποιου που χωρίς να έχει διαβάσει σκέφτηκε τον απλούστερο τρόπο να το κάνει. Δεν πρέπει να σε εκπλήσσει αν ακούσεις ότι είναι και ο χειρότερος (βέβαια αν σου δουλεύει ως έχει τον αφήνεις κι όπως είναι, δική σου απόφαση). Για τη σχέση προϊόντων-κατηγοριών θα πρέπει σίγουρα να το κάνεις με ένα επιπλέον table, όπως περιγράφεται στο link που έδωσα νωρίτερα. Αν δεν το κάνεις αυτό τότε καλή τύχη και να ξέρεις ότι θα χτυπάς τοίχους κάθε τόσο όταν θα θέλεις να πάρεις στατιστικά για κάθε κατηγορία επιπέδου 3. Μια επιπλέον περιπλοκή εδώ είναι πως τα δύο παραπάνω θέματα σχετίζονται λίγο: δεδομένου ότι έκανες σωστά τη σχέση κατηγοριών/προϊοντων, αν κάνεις ταυτόχρονα και μια καλύτερη λύση για τις κατηγορίες τότε αυτομάτως και χωρίς περισσότερο κόπο αποκτάς τη δυνατότητα να εντάξεις όποιο προϊόν θέλεις σε όσες κατηγορίες θέλεις ανεξαρτήτως επιπέδου. Αν δεν κάνεις το δεύτερο και αργότερα θελήσεις να εντάξεις προϊόντα σε πολλές κατηγορίες επιπέδου != 3 τότε πάλι θα αρχίσει το σχήμα της βάσης να εκφυλίζεται.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα