2016-05-18 7 views
0

Ich habe zwei Tabellen zuerst ist messages und zweitens ist campaign. Ich möchte eine Abfrage schreiben, wo ich die Anzahl der Nachricht finden kann, die status ist 1 und die Kampagne send_date (hier ist der Spaltentyp Varchar) ist größer als die aktuelle Zeit. Ich habe das müde.cakephp3 übereinstimmende Abfrage mit Datum varchar

$date = date('m/d/Y H:i'); 

$this->loadModel('Messages'); 
$messages = $this->Messages 
    ->find() 
    ->where(['status' => 1]) 
    ->matching('Campaigns', function ($q) use($date) { 
     return $q->where([ 
      "Campaigns.date_format(str_to_date(send_date,'%m/%d/%Y H:i'))" => $date 
     ]); 
    }) 
    ->count(); 

debug($messages); 
exit; 

aber es zeigte Fehler

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, um die richtige Syntax für 'send_date' zu verwenden, '% m /% d /% YH: i')) = '05/18/2016 00:00 'UND Campaigns.id = (Messages.`camp‘at line 1

Klicken Sie auf unten angegebenen Link, um die Struktur siehe Tabelle

enter image description here

+0

Bitte nicht Beiträge wie Schemata als (tr uncated) Bilder, stattdessen posten Sie es als Text/SQL (** http: //stackoverflow.com/questions/3090209/phpmyadmin-and-show-create-table**) in einer richtig formatierten Weise, oder zeigen Sie zumindest die ' Registerkarte "Struktur". Gleiches gilt für Werte, poste sie einfach hier in einem lesbaren Format - Danke! Davon abgesehen, warum sollten Sie 'VARCHAR' für zeitbasierte Werte verwenden, das macht nicht viel Sinn? – ndm

Antwort

0

diesen Code Versuchen:

$date = date('m/d/Y H:i'); 
$this->loadModel('Messages'); 
$messages = $this->Messages 
->find() 
->where(['status' => 1]) 
->matching('Campaigns', function ($q) use($date) { 
    return $q->where([ 
     "date_format(str_to_date(Campaigns.send_date,'%m/%d/%Y H:i'))" => $date 
    ]); 
}) 
->count(); 

debug($messages); 
exit;