Δύσκολο query

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
wabbit
Δημοσιεύσεις: 52
Εγγραφή: 24 Αύγ 2006 22:55

Δύσκολο query

Δημοσίευση από wabbit » 02 Ιουν 2007 05:01

Θέλω να κάνω ένα query που στην στήλη status
α) να επιστρέφει το company_status όταν η τιμή του είναι unprocessed ή failed ή canceled
β) Αν όχι να κοιτάζει το table orders αν υπάρχει το ίδιο order_no με prefix WEB μπροστά
γ) αν δεν υπάρχει να κοιτάζει το table invoices και να δίνει finalised
δ) αν δεν υπάρχει ούτε εκεί να επιστρέφει missing.

Το query αυτό δουλεύει μια χαρά αν του δώσω ένα συγκεκριμένο web_order να κοιτάξει, αλλά δεν ξέρω πως να κάνω κάτι τέτοιο σε multiple rows που να συγκρίνει το κάθε order_no που θα παίρνει από το weborders table με τα web_order_no στα άλλα δυο tables.

SELECT order_no, webusr, cust_no, method, cc_status,
(CASE WHEN company_status = 'unprocessed' or company_status = 'failed' or company_status = 'canceled'
THEN company_status
WHEN (SELECT count(*) from orders WHERE web_order_no = 'WEB'+order_no) > 0
THEN 'pending'
WHEN (SELECT count(*) from invoices WHERE web_order_no = 'WEB'+order_no) > 0
THEN 'finalised'
ELSE 'missing'
END) As status from weborders

wabbit
Δημοσιεύσεις: 52
Εγγραφή: 24 Αύγ 2006 22:55

Δύσκολο query

Δημοσίευση από wabbit » 05 Ιουν 2007 02:59

Βρήκα το πρόβλημα, τελικά είχε να κάνει με την σύνταξη, το + δεν κάνει CONCAT σε mySQL όπως περίμενα, οπότε το σωστό query είναι:

Κώδικας: Επιλογή όλων

SELECT order_no, webusr, cust_no, method, cc_status,
(CASE WHEN company_status = 'unprocessed' or company_status = 'failed' or company_status = 'canceled'
THEN company_status
WHEN (SELECT count(*) from orders WHERE web_order_no = CONCAT('WEB', weborders.order_no)) > 0
THEN 'pending'
WHEN (SELECT count(*) from invoices WHERE web_order_no = CONCAT('WEB', weborders.order_no)) > 0
THEN 'finalised'
ELSE 'missing'
END) As status from weborders

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες