iphotographer Δημοσ. 9 Σεπτεμβρίου 2021 Δημοσ. 9 Σεπτεμβρίου 2021 (επεξεργασμένο) Καλημέρα. Έχω κάποιες εγγραφές σε μία mysql που σε ένα πεδίο, υπάρχει και η ημερομηνία ραντεβού. πχ. meeting_date 2021-09-28. Σε μια μεταβλητή (που τραβάει από τις γενικές ρυθμίσεις του site που έχω φτιάξει) έχω ένα νούμερο σχετικά με το πόσες μέρες πριν θέλω να μου έρχεται μια ειδοποίηση. πχ. 5 μέρες. Βρήκα κάτι από google, αλλά δεν δουλέυει $days = getsetting("setting_days"); //Οι μέρες πριν το συμβάν που θέλω να λαμβάνω ειδοποίηση. Μου επιστρέφει νούμερο. πχ. 5 $this->db->select('*'); $this->db->where('meeting_date', 'CURDATE() + INTERVAL '.$days.' DAYS'); $this->db->from('meetings'); $result = $this->db->get(); $results = $result->result(); var_dump($results); Φοβούμενος οτί μπορεί να δημιουργεί πρόβλημα η μεταβλητή δοκίμασα και με ξερό νούμερο, έτσι. $this->db->select('*'); $this->db->where('meeting_date', 'CURDATE() + INTERVAL 5 DAYS'); $this->db->from('meetings'); $result = $this->db->get(); $results = $result->result(); var_dump($results); αλλά ούτε έτσι δούλεψε. Αν αφαιρέσω το where, παίρνω αποτελέσματα κανονικά. Έχω εγγραφές με meeting_date για κάθε μέρα του Σεπτεμβρίου. Οπότε θα έπρεπε να πάρω τουλάχιστον ένα αποτέλεσμα αν δούλευε το query. Επεξ/σία 9 Σεπτεμβρίου 2021 από iphotographer
Επισκέπτης Δημοσ. 9 Σεπτεμβρίου 2021 Δημοσ. 9 Σεπτεμβρίου 2021 Μια ιδέα είναι να αλλάξεις την βάση δεδομένων σου και να μην αποθηκεύεις τις ημερομηνίες έτσι πχ. meeting_date 2021-09-28. Αλλά με Unix timestamp. $before_five_days_timestamp = time()-3600*5; // timestamp για το τώρα -5 ημέρες $this->db->select('*'); $this->db->where('meeting_date', '>'.$before_five_days_timestamp); $this->db->from('meetings'); $result = $this->db->get(); $results = $result->result(); var_dump($results); Βέβαια τώρα είδα ότι μπορείς απλά στον κώδικά σου να αλλάξεις το > σε <
tsofras Δημοσ. 9 Σεπτεμβρίου 2021 Δημοσ. 9 Σεπτεμβρίου 2021 2 ώρες πριν, iphotographer είπε Καλημέρα. Έχω κάποιες εγγραφές σε μία mysql που σε ένα πεδίο, υπάρχει και η ημερομηνία ραντεβού. πχ. meeting_date 2021-09-28. Σε μια μεταβλητή (που τραβάει από τις γενικές ρυθμίσεις του site που έχω φτιάξει) έχω ένα νούμερο σχετικά με το πόσες μέρες πριν θέλω να μου έρχεται μια ειδοποίηση. πχ. 5 μέρες. Βρήκα κάτι από google, αλλά δεν δουλέυει $days = getsetting("setting_days"); //Οι μέρες πριν το συμβάν που θέλω να λαμβάνω ειδοποίηση. Μου επιστρέφει νούμερο. πχ. 5 $this->db->select('*'); $this->db->where('meeting_date', 'CURDATE() + INTERVAL '.$days.' DAYS'); $this->db->from('meetings'); $result = $this->db->get(); $results = $result->result(); var_dump($results); Φοβούμενος οτί μπορεί να δημιουργεί πρόβλημα η μεταβλητή δοκίμασα και με ξερό νούμερο, έτσι. $this->db->select('*'); $this->db->where('meeting_date', 'CURDATE() + INTERVAL 5 DAYS'); $this->db->from('meetings'); $result = $this->db->get(); $results = $result->result(); var_dump($results); αλλά ούτε έτσι δούλεψε. Αν αφαιρέσω το where, παίρνω αποτελέσματα κανονικά. Έχω εγγραφές με meeting_date για κάθε μέρα του Σεπτεμβρίου. Οπότε θα έπρεπε να πάρω τουλάχιστον ένα αποτέλεσμα αν δούλευε το query. Δοκίμασες να γράψεις πρώτα το query σε έναν sql editor ? Για να μην δουλεύει το where σημαίνει ότι κάτι δεν πάει καλά με το statement Αν και δεν παίζω με mysql ,έφτιαξα αυτό το fiddle αν θες να το δοκιμάσεις http://sqlfiddle.com/#!9/ce941d/5/0 Δείχνει ότι θέλει λίγο διαφορετική σύνταξη , οπότε αν θέλεις άλλαξε το $this->db->where('meeting_date', 'CURDATE() + INTERVAL 5 DAYS'); σε $this->db->where('meeting_date', 'DATE_ADD(CURDATE(),INTERVAL 5 DAYS)');
iphotographer Δημοσ. 9 Σεπτεμβρίου 2021 Μέλος Δημοσ. 9 Σεπτεμβρίου 2021 30 λεπτά πριν, gekatsou είπε Μια ιδέα είναι να αλλάξεις την βάση δεδομένων σου και να μην αποθηκεύεις τις ημερομηνίες έτσι πχ. meeting_date 2021-09-28. Αλλά με Unix timestamp. $before_five_days_timestamp = time()-3600*5; // timestamp για το τώρα -5 ημέρες $this->db->select('*'); $this->db->where('meeting_date', '>'.$before_five_days_timestamp); $this->db->from('meetings'); $result = $this->db->get(); $results = $result->result(); var_dump($results); Βέβαια τώρα είδα ότι μπορείς απλά στον κώδικά σου να αλλάξεις το > σε < Με μπερδέυει λίγο με τα δευτερόλεπτα, μην γίνει κανα λάθος. Γιατί εγώ στην ουσία θα τρέχω ένα cron job που θα τρέχει την function και θα στέλνει ειδοποίηση. Με τον παραπάνω τρόπο, θα στέλνει και την 4η μέρα πριν το συμβάν και την 3η μέρα κλπ. Αν βάλω ίσον τα δευτερόλεπτα δεν θα παίξει. Αν δεν βρώ άλλη λύση (που ελπίζω να βρω) θα κάνω το where < από 6 μερες και > από 4 μέρες 29 λεπτά πριν, tsofras είπε Δοκίμασες να γράψεις πρώτα το query σε έναν sql editor ? Για να μην δουλεύει το where σημαίνει ότι κάτι δεν πάει καλά με το statement Αν και δεν παίζω με mysql ,έφτιαξα αυτό το fiddle αν θες να το δοκιμάσεις http://sqlfiddle.com/#!9/ce941d/5/0 Δείχνει ότι θέλει λίγο διαφορετική σύνταξη , οπότε αν θέλεις άλλαξε το $this->db->where('meeting_date', 'CURDATE() + INTERVAL 5 DAYS'); σε $this->db->where('meeting_date', 'DATE_ADD(CURDATE(),INTERVAL 5 DAYS)'); Φίλε δούλεψε μια χαρά. Πήρα αποτελέσματα. Δεν μπορώ όμως το 5 να το αντικαταστήσω με την μεταβλητή. Δηλαδή έτσι δουλεύει $sql="SELECT * FROM `cases` WHERE `case_date` = date_add(CURDATE(),INTERVAL 5 DAY)"; έτσι $days = intval(getsetting("setting_days")); $sql="SELECT * FROM `cases` WHERE `case_date` = date_add(CURDATE(),INTERVAL $days DAY)"; και έτσι $days = intval(getsetting("setting_days")); $sql="SELECT * FROM `cases` WHERE `case_date` = date_add(CURDATE(),INTERVAL ".$days." DAY)"; που δοκίμασα δεν δουλέυει.
tsofras Δημοσ. 9 Σεπτεμβρίου 2021 Δημοσ. 9 Σεπτεμβρίου 2021 36 λεπτά πριν, iphotographer είπε Με μπερδέυει λίγο με τα δευτερόλεπτα, μην γίνει κανα λάθος. Γιατί εγώ στην ουσία θα τρέχω ένα cron job που θα τρέχει την function και θα στέλνει ειδοποίηση. Με τον παραπάνω τρόπο, θα στέλνει και την 4η μέρα πριν το συμβάν και την 3η μέρα κλπ. Αν βάλω ίσον τα δευτερόλεπτα δεν θα παίξει. Αν δεν βρώ άλλη λύση (που ελπίζω να βρω) θα κάνω το where < από 6 μερες και > από 4 μέρες Φίλε δούλεψε μια χαρά. Πήρα αποτελέσματα. Δεν μπορώ όμως το 5 να το αντικαταστήσω με την μεταβλητή. Δηλαδή έτσι δουλεύει $sql="SELECT * FROM `cases` WHERE `case_date` = date_add(CURDATE(),INTERVAL 5 DAY)"; έτσι $days = intval(getsetting("setting_days")); $sql="SELECT * FROM `cases` WHERE `case_date` = date_add(CURDATE(),INTERVAL $days DAY)"; και έτσι $days = intval(getsetting("setting_days")); $sql="SELECT * FROM `cases` WHERE `case_date` = date_add(CURDATE(),INTERVAL ".$days." DAY)"; που δοκίμασα δεν δουλέυει. Θα σε γελάσω γιατί δεν σκαμπάζω , php είναι αυτή ? Μήπως πρέπει να κάνεις κάπως escape του χαρακτήρες με τα quotes ή να χτίσεις όλο το string μαζί με την μεταβλητή και μετά να το περάσεις ως όρισμα ?
Επισκέπτης Δημοσ. 9 Σεπτεμβρίου 2021 Δημοσ. 9 Σεπτεμβρίου 2021 (επεξεργασμένο) $before_five_days_timestamp = time()-3600*5; // timestamp για το τώρα -5 ημέρες $fivedaysbefore = date('Y-m-d',$before_five_days_timestamp); $this->db->select('*'); $this->db->where('meeting_date', ' LIKE "'.$fivedaysbefore.'"'); $this->db->from('meetings'); $result = $this->db->get(); $results = $result->result(); var_dump($results); Αυτό πιστεύω σε καλύπτει. edit: Έλεγξε και με ποια ώρα τρέχει ο Server Επεξ/σία 9 Σεπτεμβρίου 2021 από Επισκέπτης
iphotographer Δημοσ. 9 Σεπτεμβρίου 2021 Μέλος Δημοσ. 9 Σεπτεμβρίου 2021 Δούλεψε παιδιά, με τον τρόπο @tsofras. Σας ευχαριστώ. 1
k33theod Δημοσ. 10 Σεπτεμβρίου 2021 Δημοσ. 10 Σεπτεμβρίου 2021 To from statement πρέπει να προηγείται του where
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα