2013-08-30 7 views
8

Je dois interroger quelque chose qui a une condition where avec "> =" et "= <" mais je n'ai pas de chance. C'est dans CODEIGNITER.'Supérieur ou égal' et 'inférieur ou égal' CODEIGNITER

Ceci est la façon naturelle dans la requête mysql:

SELECT COUNT(payment.keyid) AS rec_count, `product_key`.`client_name`, 
`product_key`.`contact_email`, `product_key`.`status`, `product_key`.`id`, 
`payment`.`paymentdate`, (payment.id) as pid, `payment`.`subscription_type` 
FROM (`product_key`) 
LEFT OUTER JOIN `payment` ON `payment`.`keyid`=`product_key`.`id` 
WHERE `payment`.`paymentdate` >= '2013-08-01' 
    AND `payment`.`paymentdate` =< '2013-08-31' 
    AND `status` = 'purchased' 
GROUP BY `product_key`.`id` 
ORDER BY `client_name` asc 

Et voici ce que j'ai:

return $this->db 
    ->select('COUNT(payment.keyid) AS rec_count') 
    ->select('product_key.client_name, product_key.contact_email, product_key.status, product_key.id, payment.paymentdate, (payment.id) as pid,payment.subscription_type') 
    ->from('product_key')   
    ->where('payment.paymentdate >=', $month_start) 
    ->where('payment.paymentdate =<', $month_end) 
    ->where('status', 'purchased') 
    ->join('payment', 'payment.keyid=product_key.id', 'left outer') 
    ->order_by('client_name', "asc") 
    ->group_by('product_key.id') 
    ->get() 
    ->result(); 

Peut-être que quelqu'un pourrait me aider à ce sujet. Merci.

+0

Avez-vous essayez d'utiliser entre ?? –

+0

Ou essayez de convertir explicitement la date codée en dur à ce jour –

+0

@ ashutosh-arya Je n'ai jamais utilisé entre dans aucune de mes requêtes avant. Surtout maintenant que j'utilise codeigniter comme cadre. Mais je vais chercher comment l'utiliser maintenant. Merci pour le conseil. –

Répondre

7

Remplacez =< par <=.

J'ai également testé votre requête actuelle dans phpmyadmin, car je ne pouvais pas croire qu'elle ne génère pas d'erreur. Mais le mien le fait. Votre requête ne devrait donc pas fonctionner dans phpmyadmin.

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=< ...' at line ... 
+0

Oui, j'ai découvert cela tout à l'heure. Toutes mes excuses pour mon insouciance. Merci à tous pour l'aide! :) –

0

Essayez:

$this->db 
->select('COUNT(payment.keyid) AS rec_count, product_key.client_name, product_key.contact_email, product_key.status, product_key.id, payment.paymentdate, (payment.id) as pid, payment.subscription_type', false) 
->from('product_key') 
->join('payment', 'payment.keyid=product_key.id', 'LEFT OUTER') 
->where('payment.paymentdate >=', '2013-08-01') 
->where('payment.paymentdate =<', '2013-08-31') 
->where('status', 'purchased') 
->group_by('product_key.id') 
->order_by('client_name', 'asc') 
->get(); 
+0

Autant que je voudrais le faire, mais je ne peux pas. Mes variables varient en fonction de la date actuelle. –

5

Essayez de changer le =<-<= comme

->where('payment.paymentdate >=', $month_start) 
->where('payment.paymentdate <=', $month_end) 

Et mieux mais pas cumpolsury à se joindre à la table avant où condition.Now votre requête devrait être comme

->select('COUNT(payment.keyid) AS rec_count') 
->select('product_key.client_name, product_key.contact_email, product_key.status, product_key.id, payment.paymentdate, (payment.id) as pid,payment.subscription_type') 
->from('product_key')   
->join('payment', 'payment.keyid=product_key.id', 'left outer')  
->where('payment.paymentdate >=', $month_start) 
->where('payment.paymentdate <=', $month_end) 
->where('status', 'purchased') 
->order_by('client_name', "asc") 
->group_by('product_key.id') 
->get() 
+0

Le SQL d'origine ne contient aucun 'OR': -? –

+0

@Gautam: Un retour en arrière et ensuite ajouter le même à nouveau? Pourquoi? –

+0

En fait, je veux lui suggérer d'utiliser or_where mais cela peut ne pas être utile pour lui ... J'ai édité thax. – Gautam3164

0

de ce que je sais, vous pouvez les écrire comme ce

$this->db->select('COUNT(payment.keyid) AS rec_count, product_key.client_name, product_key.contact_email, product_key.status, product_key.id, payment.paymentdate, (payment.id) as pid, payment.subscription_type', false); 
$this->db->where('payment.paymentdate >= "2013-08-01"'); 
$this->db->where('payment.paymentdate <= "2013-08-31"'); 
$this->db->where('status', 'purchased'); 
$this->db->group_by('product_key.id'); 
$this->db->order_by('client_name', 'asc'); 
$this->db->join('payment', 'payment.keyid=product_key.id', 'LEFT OUTER') 
$this->db->get('product_key'); 
Questions connexes