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

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

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

Καλημέρα. Έχω κάποιες εγγραφές σε μία 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.

Επεξ/σία από iphotographer
Δημοσ.

Μια ιδέα είναι να αλλάξεις την βάση δεδομένων σου και να μην αποθηκεύεις τις ημερομηνίες έτσι πχ. 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);

Βέβαια τώρα είδα ότι μπορείς απλά στον κώδικά σου να αλλάξεις το > σε <

Δημοσ.
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)');

 

Δημοσ.
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)";

που δοκίμασα δεν δουλέυει.

 

 

 

Δημοσ.
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 μαζί με την μεταβλητή και μετά να το περάσεις ως όρισμα ?

Δημοσ. (επεξεργασμένο)
$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

Επεξ/σία από Επισκέπτης

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

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

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

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

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

Σύνδεση

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

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