以下是适合我的SQL
声明:
SELECT inl_cbsubs_subscriptions.user_id, inl_cbsubs_payment_items.subscription_id, inl_cbsubs_payment_items.stop_date, inl_cbsubs_payment_items.id FROM inl_cbsubs_subscriptions INNER JOIN inl_cbsubs_payment_items ON inl_cbsubs_subscriptions.id=inl_cbsubs_payment_items.subscription_id WHERE inl_cbsubs_subscriptions.user_id=596 ORDER BY id DESC LIMIT 1;
这是我尝试为Joomla格式化相同的查询:
$db2 = JFactory::getDbo();
$stopDateQuery = $db2->getQuery(true);
$stopDateQuery->select($db2->quoteName(array('#__cbsubs_subscriptions.user_id', '#__cbsubs_payment_items.subscription_id', '#__cbsubs_payment_items.stop_date')));
$stopDateQuery->from($db2->quoteName('#__cbsubs_subscriptions'));
$stopDateQuery->innerJoin($db->quoteName('#__cbsubs_payment_items') . ' ON #__cbsubs_subscriptions.id = #__cbsubs_payment_items.subscription_id');
$stopDateQuery->where($db2->quoteName('#__cbsubs_subscriptions.user_id')." = ".$db2->quote($myId));
$stopDateQuery->ORDER BY($db2->quoteName('#__cbsubs_payment_items.id'));
$stopDateQuery->DESC LIMIT 1;
我已经测试了Joomla格式,如果删除最后两行,可以让它工作:
$stopDateQuery->ORDER BY($db2->quoteName('#__cbsubs_payment_items.id'));
$stopDateQuery->DESC LIMIT 1;
这告诉我格式化问题在该位置。我需要在查询中添加这些额外的过滤器,那么我在哪里出错呢?
答案 0 :(得分:0)
尝试使用以下(适用于Joomla 3.x +)
$stopDateQuery->order($db2->quoteName('#__cbsubs_payment_items.id') . 'DESC');
$stopDateQuery->setLimit(1);
如果您使用的是Joomla 2.5,请使用此设置限制
$db2->setQuery($stopDateQuery,0,1);
答案 1 :(得分:0)
只要无法进行sql注入,您就可以这样做:
$stopDateQuery = "SELECT inl_cbsubs_subscriptions.user_id, inl_cbsubs_payment_items.subscription_id, inl_cbsubs_payment_items.stop_date, inl_cbsubs_payment_items.id FROM inl_cbsubs_subscriptions INNER JOIN inl_cbsubs_payment_items ON inl_cbsubs_subscriptions.id=inl_cbsubs_payment_items.subscription_id WHERE inl_cbsubs_subscriptions.user_id=596 ORDER BY id DESC LIMIT 1";
它的运行速度也快一点。
如果可以进行sql注入,那么可以使用
$db2->quoteName($id)