पर दिए गए खंड में अगली पंक्ति खोजें मेरे पास एक MySQL डेटाबेस में products
नामक एक तालिका है। products
इस तरह की कुछ क्या दिखता है:एसक्यूएल: एक आईडी
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
जाहिर है मैं कई स्तंभ बाहर छोड़ दिया है मेरे सवाल के लिए महत्वपूर्ण नहीं। जब मैं इस तालिका से पूछता हूं, तो मैं कई अलग-अलग कॉलमों में से एक द्वारा सॉर्ट करूँगा (उपयोगकर्ता इंटरफ़ेस अलग-अलग उपयोगकर्ताओं को सॉर्टिंग कॉलम और ऑर्डर बदलने की इजाजत देता है), और मेरे पास एक खोज खंड हो सकता है जिस स्थिति में मैं एक LIKE क्लॉज करूंगा नाम और डीआईएन।
मैं क्या जानना चाहता हूं, सॉर्टिंग जानकारी और खोज जानकारी, और एक विशिष्ट उत्पाद की आईडी (कहें मैंने 004 की खोज की, जो 3 परिणाम लौटा, और मैं उनमें से एक को देख रहा हूं), मैं कैसे कर सकता हूं अगले और पिछले उत्पादों को प्राप्त करें?
मैं यह करने की जरूरत है, क्योंकि एक उपयोगकर्ता खोज और परिणाम छँटाई के बाद उत्पादों को देखते हुए एक संपादित करने के लिए/क्लिक करता है तो वे पिछले पृष्ठ पर जाए बिना परिणामों से गुजरने के लिए सक्षम होना चाहता हूँ।
क्या एसक्यूएल में ऐसा करने का कोई अच्छा और कारगर तरीका है, या क्या मैं PHP का उपयोग करके सबसे अच्छा हूं? किसी भी विचार का भी स्वागत है।
वर्तमान में यह SQL क्वेरी का उपयोग कर, जो समस्या आ रही है, तो मैं इन सबसे 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 = '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 के साथ भयानक रहा हूं। क्या मुझे सीयूआरआर के संदर्भों को छोड़ देना चाहिए, या क्या मुझे अपने टेबल नामों में सीयूआरआर और टेबल बदलना चाहिए? –
तालिका आपके तालिका के नाम के लिए प्लेसहोल्डर है। सीयूआरआर और टी उपनाम हैं - उन्हें अकेला छोड़ दें। – RichardTheKiwi
मुझे आपकी क्वेरी के बिना सफलता नहीं मिल रही है, संभावना से अधिक मैं कुछ गलत कर रहा हूं। मेरी क्वेरी इस तरह दिखती है: 'चयन करें * table_name से जहां सक्रिय = 1 और हटाया गया = 0 डीआईईसीसी द्वारा आदेश दिया गया है और जब मैं आपकी क्वेरी चलाता हूं तो मुझे अपनी क्वेरी द्वारा पहली पंक्ति वापस मिलती है, भले ही मैं वापस लौटाई गई 5 वीं आईडी का उपयोग कर रहा हूं । मुझे 6 वें आईडी से आईडी 38 प्राप्त करना चाहिए। विचार? –