4

物事が正しくエスケープされていないことはわかっていますが、注文内の次の ID と前の ID を取得するために前/次のクエリを作成しようとしていますが、出力が phpmyadmin の並べ替えと一致しません。私はちょうど「次」を書き、逆の条件で前を書きます。このクエリは、注文内で次に高い ID 値番号を取得しているようです...注文インデックスの次または前が必要です...誰か助けてくれますか?

$db = JFactory::getDBO();
$query = "SELECT image_id FROM #__jxgallery_images WHERE image_id >".$currentid."' ORDER   BY '".$ordering." ".$direction." LIMIT 1";
// Executes the current SQL query string.
    $db->setQuery($query);
// returns the array of database objects
    $list = $db->loadObjectList();
// create the list of ids
    foreach ($list as $item) {
    $next = $item->image_id;
    echo $next.'<br/>';
    }
echo 'The next ID in this sort state is&nbsp;'.$next.'<br />';
?>

これは phpmyadmin です。その通りです...

SELECT * FROM `jos_jxgallery_images` 
ORDER BY `jos_jxgallery_images`.`hits` DESC 
LIMIT 0 , 30

コードでこのクエリを照合して、同じ結果を取得しました。私の変数は、私の句内の ($ordering) 'hits' フィールドと 'desc' ($direction) を埋めます。それはうまくいきます。image_ids と hits は特別なものではなく、単なる数字です。ヒットが並べ替えられると、一致するように image_id が再作成されます。フィールドにあるものについては、image_id の次の値は必要ありません。現在の image_id I プラグインに基づいて、値に関係なく、次の行または前の行が必要です。

これらは実際の image_ids LIMIT 5 であり、ヒット フィールドの降順で並べられています。

52791 
52801 
52781 
52771 
52581`

現在見ている画像の ID が の52791場合、前の画像は何もなく、次の画像は になります52801。私のクエリが行っていることは、次の行ではなく、次に高い VALUED image_id であるため、より高い値の数値の image_id を「next」として提供していると思います。クエリで、より大きい値を要求している理由がわかります...しかし、次の行が必要なだけです

4

1 に答える 1

0

問題は WHERE 条件にあると思います:WHERE image_id >".$currentid."'

あなたがやろうとしていることを私が理解している場合、それを行う1つの方法は次のとおりです。

$query = "SELECT image_id FROM `#__jxgallery_images` ORDER BY ".$ordering." ".$direction." LIMIT 2";

$db->setQuery($query);

$list = $db->loadObjectList();

$next_item = $list[1]->image_id;

クエリから WHERE 条件が削除され、 にも変更されていることに注意してLIMIT 1くださいLIMIT 2。このように、クエリは基本的に、上位の値と次に高い「ヒット」値を持つ値を返します。

これが役立つことを願っています。

于 2012-08-07T04:41:32.327 に答える