私はproducts
というテーブルをMySQLデータベースに持っています。SQL:where句の次の行を見つけて
id name din strength active deleted
1 APA TEST 00246374 25 1 0
4 APA BOB 00246375 50 1 0
5 APA TIRE 00246888 50 1 0
7 APA ROT 00521414 100 1 0
9 APA APA 01142124 100 1 0
6 APA CODE 00121212 150 1 0
8 APA SERV 00011145 600 1 0
もちろん、私は私の質問には重要ではないいくつかの列を残してきた:products
は、このようないくつかは何に見えます。私はこのテーブルを照会するとき、私はいくつかの異なる列の1つでソートします(ユーザーインターフェイスで個々のユーザーが並べ替えの列と順序を変更できるようになります)。検索句がある場合はLIKE句をNAMEとDIN。
私が知りたいのは、ソート情報と検索情報、および特定の製品のIDが与えられていることです(私は、3つの結果を返した004を検索し、そのうちの1つを見ています)次の製品や前の製品を入手できますか?
結果を検索してソートした後にユーザーが編集/表示するためにクリックすると、前のページに移動せずに結果を循環させたいからです。
SQLでこれを行うには効率的な方法がありますか、それともPHPを使うのが一番ですか?どんなアイデアも歓迎します。現在、私は、ソートstrength
列での重複値
SELECT T.*
FROM `wp_products` T
INNER JOIN `wp_products` curr on curr.id = 38
AND ((T.strength = curr.strength and T.id < curr.id)
OR (T.strength > curr.strength))
WHERE T.active = 1 AND T.deleted = 0 AND (T.name LIKE '%%' OR T.din LIKE '%%')
ORDER BY T.strength ASC, T.id ASC
LIMIT 1
は(次の項目を取得するために設計された)(ワードプレスを使用して)私のPHPコード
があるようならば問題が発生している。このSQLクエリを使用して、
$sql = 'SELECT T.*
FROM `' . $wpdb->prefix . 'apsi_products` T
INNER JOIN `' . $wpdb->prefix . 'apsi_products` curr on curr.id = ' . $item->id . '
AND ((T.' . $wpdb->escape($query['orderby']) . ' = curr.' . $wpdb->escape($query['orderby']) . ' and T.id > curr.id)
OR (T.' . $wpdb->escape($query['orderby']) . ' > curr.' . $wpdb->escape($query['orderby']) . '))
WHERE T.active = 1 AND T.deleted = 0 AND (T.name LIKE \'%' . $query['where'] . '%\' OR T.din LIKE \'%' . $query['where'] . '%\')
ORDER BY T.' . $wpdb->escape($query['orderby']) . ' ' . $query['order'] . ', T.id ASC
LIMIT 1;';
申し訳ありませんが、私はいつもSQLにひどいことをしてきました。 CURRへの参照をそのまま残すか、CURRとTABLEをテーブル名に変更する必要がありますか? –
TABLEは、テーブル名のプレースホルダです。 CURRとTはエイリアスです。それらをそのままにしておきます。 – RichardTheKiwi
私はあなたの質問なしに成功していない、私は間違って何かをやっている可能性があります。私のクエリは次のようになります: 'SELECT * FROM table_name WHERE active = 1 AND deleted = 0 ORDER BY din DESC'そして、クエリを実行すると、返された5番目のIDを使用していても、 。 6番目のIDからID 38を取得する必要があります。アイデア? –