MySQL में अगला / पिछला रिकॉर्ड कैसे प्राप्त करें?


129

मान लें कि मेरे पास आईडी 3,4,7,9 के साथ रिकॉर्ड है और मैं अगले / पिछले लिंक के माध्यम से नेविगेशन द्वारा एक से दूसरे में जाने में सक्षम होना चाहता हूं। समस्या यह है, कि मैं नहीं जानता कि कैसे निकटतम उच्च आईडी के साथ रिकॉर्ड प्राप्त करना है।

इसलिए जब मेरे पास आईडी 4 के साथ एक रिकॉर्ड है, तो मुझे अगले मौजूदा रिकॉर्ड को लाने में सक्षम होना चाहिए, जो 7. होगा। क्वेरी संभवतः कुछ इस तरह दिखाई देगी

SELECT * FROM foo WHERE id = 4 OFFSET 1

मैं पूरे परिणाम सेट और मैन्युअल रूप से पुनरावृत्ति किए बिना अगला / पिछला रिकॉर्ड कैसे प्राप्त कर सकता हूं?

मैं MySQL 5 का उपयोग कर रहा हूं।


8
आपको आईडी की छँटाई के लिए भरोसा नहीं करना चाहिए (यानी: अपनी आईडी को एक स्वत: -प्रमाण कॉलम माना जाता है)। आपको तालिका में एक और स्तंभ बनाना चाहिए जो स्पष्ट रूप से सॉर्ट क्रम को दर्शाता है।
डिसेंट डब्बलर

जवाबों:


258

आगे:

select * from foo where id = (select min(id) from foo where id > 4)

पिछला:

select * from foo where id = (select max(id) from foo where id < 4)

7
मुझे लगता है कि उपश्रेणियों को फू (जहां आईडी> 4) से मिनट (आईडी) चुनें और फू से आईडी (4) का चयन करें।
डिसेंट डब्बलर

1
आप सही हैं, मैं क्लॉज से भूल गया। इस पर ध्यान दिलाने के लिए धन्यवाद। :)
longneck

2
यह समाधान नहीं है क्योंकि यदि आप "फू" से पंक्ति हटाते हैं, तो क्या होगा? : पी
वैलेन्टिन हिरतोव

@valentinhristov मुझे समझ नहीं आ रहा है कि आप क्या कह रहे हैं। कृपया एक उदाहरण दें।
लॉन्गनेक

@ लॉन्गनेक यदि आप रिकॉर्डिंग के बाद सब कुछ ठीक है। लेकिन अगर आप संस्करण आईडी के बाद सामग्री पोस्ट करते हैं तो अनुक्रम में स्थिति के लिए मानदंड नहीं है।
वैलेंटाइन हिरस्तोव

140

Cemkalyoncu के समाधान के अलावा :

अगला रिकॉर्ड:

SELECT * FROM foo WHERE id > 4 ORDER BY id LIMIT 1;

पिछला रिकॉर्ड:

SELECT * FROM foo WHERE id < 4 ORDER BY id DESC LIMIT 1;

संपादित करें: चूंकि यह उत्तर हाल ही में कुछ अपवर्जित हो रहा है, इसलिए मैं वास्तव में इस टिप्पणी को बल देना चाहता हूं जो मैंने पहले समझने के बारे में किया था कि प्राथमिक कुंजी कोलम का अर्थ स्तंभ के रूप में नहीं है, क्योंकि MySQL उच्च, स्वतः वृद्धि की गारंटी नहीं देता है मूल्यों को बाद में आवश्यक रूप से जोड़ा जाता है।

यदि आप इस बारे में परवाह नहीं करते हैं, और बस एक उच्च (या निम्न) के साथ रिकॉर्ड की आवश्यकता है idतो यह पर्याप्त होगा। बस यह निर्धारित करने के लिए एक साधन के रूप में उपयोग न करें कि क्या रिकॉर्ड वास्तव में बाद में जोड़ा गया है (या पहले)। उदाहरण के लिए, उदाहरण के लिए, एक डेटाइम कॉलम का उपयोग करने पर विचार करें।


मैं इस जवाब को बहुत पसंद करता हूं, टाइमस्टैम्प द्वारा मैं छांटता हूं, और इसका मतलब है कि कोई उपश्रेणी नहीं है, इसलिए 4 के बजाय 2 प्रश्न हैं।
मौरिस

61

उपरोक्त सभी समाधानों में दो डेटाबेस कॉल की आवश्यकता होती है। नीचे दिए गए sql कोड दो sql कथनों को एक में जोड़ते हैं।

select * from foo 
where ( 
        id = IFNULL((select min(id) from foo where id > 4),0) 
        or  id = IFNULL((select max(id) from foo where id < 4),0)
      )    

3
निश्चित रूप से सबसे अच्छा समाधान। फास्ट और सभी एक क्वेरी में।
डेमन

एक बहुत अधिक जटिल प्रश्न में भी perfeclty काम करता है!
तायार

DISTINCTपहले जोड़ने से *यह और भी बेहतर हो जाएगा, अर्थात्, यदि मूल्य हो idसकता है 0
एजाज

उत्कृष्ट समाधान। पहले और आखिरी रिकॉर्ड में idदो के बजाय एकल वापसी होगी ।
लबोसद्ज़

19
SELECT * FROM foo WHERE id>4 ORDER BY id LIMIT 1

1
+1 मुझे लगता है कि यह सबसे साफ समाधान है। लेकिन लिमिट क्लॉज अंतिम आना चाहिए: * Foo from foo WHERE id> 4 ORDER BY आईडी लिमिट 1
डिसेंट डब्बलर

और SELECT * FROM foo WHERE id<4 ORDER BY id DESC LIMIT 1
प्रीवियस

12

मैं भी ऐसा ही कुछ करने का प्रयास कर रहा था, लेकिन मुझे तारीख के क्रम में परिणामों की आवश्यकता थी क्योंकि मैं एक छांटने वाले कॉलम के रूप में आईडी फ़ील्ड पर भरोसा नहीं कर सकता था। यहाँ समाधान मैं के साथ आया हूँ।

पहले हम तालिका में वांछित रिकॉर्ड के सूचकांक का पता लगाते हैं, जब हम चाहते हैं तो इसे क्रमबद्ध किया जाता है:

SELECT row
FROM 
(SELECT @rownum:=@rownum+1 row, a.* 
FROM articles a, (SELECT @rownum:=0) r
ORDER BY date, id) as article_with_rows
WHERE id = 50;

फिर परिणाम 2 घटाकर इसे सीमा विवरण में डाल दिया। उदाहरण के लिए उपरोक्त 21 मेरे लिए लौटा है इसलिए मैं चलाता हूं:

SELECT * 
FROM articles
ORDER BY date, id
LIMIT 19, 3

आपको अपने प्राथमिक रिकॉर्ड के साथ-साथ यह अगले और पिछले रिकॉर्ड देता है जो आपके द्वारा दिए गए आदेश को दिया गया है।

मैंने इसे एक एकल डेटाबेस कॉल के रूप में करने की कोशिश की, लेकिन यह एक पैरामीटर के रूप में एक चर लेने के लिए सीमा विवरण नहीं प्राप्त कर सका।


मुझे आपके दृष्टिकोण में दिलचस्पी है। क्या होगा अगर आपको एक JOIN भी करना है? कहते हैं, लेखों से एक JOIN लेखकों पर b.this = a.that। यह मुझे प्रतीत होता है कि JOIN क्रम को गड़बड़ कर देता है। यहाँ एक उदाहरण pastebin.com/s7R62GYV है
idrarig

1
एक JOIN करने के लिए, आपको दो अलग-अलग @variables को परिभाषित करना होगा। `SELECT current.row, current.id, past.row, last.id FROM (SELECT @rownum: = @ rownum + 1 row; a। * लेखों से a (SELECT @rownum: = 0) r ORDER BY तिथि तक, id) current_row के रूप में LEFT JOIN (SELECT @ rownum2: = @ rownum2 + 1 row, a।।।) लेखों से (a (SELECT @ rownum2: = 0) r ORDER तिथि के अनुसार, आईडी, id_row ON (current_row.id = last_row) के रूप में। आईडी) और (current_row.row =
last_row.row

7

इस उदाहरण का प्रयास करें।

create table student(id int, name varchar(30), age int);

insert into student values
(1 ,'Ranga', 27),
(2 ,'Reddy', 26),
(3 ,'Vasu',  50),
(5 ,'Manoj', 10),
(6 ,'Raja',  52),
(7 ,'Vinod', 27);

SELECT name,
       (SELECT name FROM student s1
        WHERE s1.id < s.id
        ORDER BY id DESC LIMIT 1) as previous_name,
       (SELECT name FROM student s2
        WHERE s2.id > s.id
        ORDER BY id ASC LIMIT 1) as next_name
FROM student s
    WHERE id = 7; 

नोट: यदि मान नहीं मिला है तो यह अशक्त हो जाएगा ।

उपरोक्त उदाहरण में, पिछला मान राजा होगा और अगला मान शून्य होगा क्योंकि अगला मूल्य नहीं है।


7

@Dan के दृष्टिकोण का उपयोग करके, आप JOINs बना सकते हैं। बस प्रत्येक उप क्वेरी के लिए एक भिन्न @variable का उपयोग करें।

SELECT current_row.row, current_row.id, previous_row.row, previous_row.id
FROM (
  SELECT @rownum:=@rownum+1 row, a.* 
  FROM articles a, (SELECT @rownum:=0) r
  ORDER BY date, id
) as current_row
LEFT JOIN (
  SELECT @rownum2:=@rownum2+1 row, a.* 
  FROM articles a, (SELECT @rownum2:=0) r
  ORDER BY date, id
) as previous_row ON
  (current_row.id = previous_row.id) AND (current_row.row = previous_row.row - 1)

बस मुझे जो चाहिए था, धन्यवाद। ध्यान दें कि आपका चयन सही नहीं है, current-> current_row& previous-> previous_row
लुडोविक गिलाइम्यू

यह क्वेरी यह पता लगाने के लिए उपयोगी हो सकती है कि रिकॉर्ड टेबल से हटा दिए गए थे (ऑटो_इंसेमेंट आईडी कॉलम का क्रम टूट रहा है) या नहीं।
धर्मंग

@LudovicGuillaume आप अधिक विशिष्ट हो सकते हैं। मुझे आपकी टिप्पणी समझ में नहीं आई, क्षमा करें। लेकिन क्वेरी में
पिछले_रो

4

अगली पंक्ति

SELECT * FROM `foo` LIMIT number++ , 1

पिछली पंक्ति

SELECT * FROM `foo` LIMIT number-- , 1

अगली पंक्ति का नमूना

SELECT * FROM `foo` LIMIT 1 , 1
SELECT * FROM `foo` LIMIT 2 , 1
SELECT * FROM `foo` LIMIT 3 , 1

नमूना पिछली पंक्ति

SELECT * FROM `foo` LIMIT -1 , 1
SELECT * FROM `foo` LIMIT -2 , 1
SELECT * FROM `foo` LIMIT -3 , 1

SELECT * FROM `foo` LIMIT 3 , 1
SELECT * FROM `foo` LIMIT 2 , 1
SELECT * FROM `foo` LIMIT 1 , 1

4

मुझे डैन के समान ही समस्या थी, इसलिए मैंने उनके उत्तर का उपयोग किया और इसमें सुधार किया।

पहले पंक्ति सूचकांक का चयन करें, यहां कुछ भी अलग नहीं है।

SELECT row
FROM 
(SELECT @rownum:=@rownum+1 row, a.* 
FROM articles a, (SELECT @rownum:=0) r
ORDER BY date, id) as article_with_rows
WHERE id = 50;

अब दो अलग-अलग प्रश्नों का उपयोग करें। उदाहरण के लिए यदि पंक्ति सूचकांक 21 है, तो अगले रिकॉर्ड का चयन करने की क्वेरी होगी:

SELECT * 
FROM articles
ORDER BY date, id
LIMIT 21, 1

पिछले रिकॉर्ड का चयन करने के लिए इस क्वेरी का उपयोग करें:

SELECT * 
FROM articles
ORDER BY date, id
LIMIT 19, 1

ध्यान रखें कि पहली पंक्ति (पंक्ति सूचकांक 1) के लिए, सीमा -1 तक जाएगी और आपको MySQL त्रुटि मिलेगी। इसे रोकने के लिए आप एक if-statement का उपयोग कर सकते हैं। बस किसी भी चीज का चयन न करें, क्योंकि पहले से कोई रिकॉर्ड नहीं है। पिछले रिकॉर्ड के मामले में, अगली पंक्ति होगी और उसके बाद कोई परिणाम नहीं होगा।

यह भी ध्यान रखें कि यदि आप एएससी के बजाय ऑर्डर के लिए डीईएससी का उपयोग करते हैं, तो आप अगली और पिछली पंक्तियों का चयन करने के लिए पूछताछ करते हैं, लेकिन फिर भी स्विच किया जाता है।


3

यह अधिक समान परिणाम की स्थिति के लिए सार्वभौमिक समाधान है।

<?php
$your_name1_finded="somethnig searched"; //$your_name1_finded must be finded in previous select

$result = db_query("SELECT your_name1 FROM your_table WHERE your_name=your_condition ORDER BY your_name1, your_name2"); //Get all our ids

$i=0;
while($row = db_fetch_assoc($result)) { //Loop through our rows
    $i++;
    $current_row[$i]=$row['your_name1'];// field with results
    if($row['your_name1'] == $your_name1_finded) {//If we haven't hit our current row yet
        $yid=$i;
    }
}
//buttons
if ($current_row[$yid-1]) $out_button.= "<a  class='button' href='/$your_url/".$current_row[$yid-1]."'>BUTTON_PREVIOUS</a>";
if ($current_row[$yid+1]) $out_button.= "<a  class='button' href='/$your_url/".$current_row[$yid+1]."'>BUTTON_NEXT</a>";

echo $out_button;//display buttons
?>

3

यहां हमारे पास एकल MySQL क्वेरी का उपयोग करके पिछले और अगले रिकॉर्ड लाने का एक तरीका है। जहां 5 वर्तमान रिकॉर्ड की आईडी है।

select * from story where catagory=100 and  (
    id =(select max(id) from story where id < 5 and catagory=100 and order by created_at desc) 
    OR 
    id=(select min(id) from story where id > 5 and catagory=100 order by created_at desc) )

2

MySQL & PHP में अगला / पिछला रिकॉर्ड कैसे प्राप्त करें?

मेरा उदाहरण केवल आईडी प्राप्त करना है

function btn_prev(){

  $id = $_POST['ids'];
  $re = mysql_query("SELECT * FROM table_name WHERE your_id < '$id'  ORDER BY your_id DESC LIMIT 1");

  if(mysql_num_rows($re) == 1)
  {
    $r = mysql_fetch_array($re);
    $ids = $r['your_id'];
    if($ids == "" || $ids == 0)
    {
        echo 0;
    }
    else
    {
        echo $ids;
    }
  }
  else
  {
    echo 0;
  }
}



function btn_next(){

  $id = $_POST['ids'];
  $re = mysql_query("SELECT * FROM table_name WHERE your_id > '$id'  ORDER BY your_id ASC LIMIT 1");

  if(mysql_num_rows($re) == 1)
  {
    $r = mysql_fetch_array($re);
    $ids = $r['your_id'];
    if($ids == "" || $ids == 0)
    {
        echo 0;
    }
    else
    {
        echo $ids;
    }
  }
  else
  {
    echo 0;
  }
}

डाउनवोट किया गया क्योंकि यह SQL इंजेक्शन के लिए असुरक्षित है । मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन नौसिखिए डेवलपर्स को इसके बारे में पता होना चाहिए।
ayrtonvwf

2

केवल एक क्वेरी का उपयोग करने के लिए @Don दृष्टिकोण का अनुकूलन

SELECT * from (
  SELECT 
     @rownum:=@rownum+1 row,
     CASE a.id WHEN 'CurrentArticleID' THEN @currentrow:=@rownum ELSE NULL END as 'current_row',
     a.*  
  FROM articles a,
     (SELECT @currentrow:=0) c,  
     (SELECT @rownum:=0) r
   ORDER BY `date`, id  DESC
 ) as article_with_row
 where row > @currentrow - 2
 limit 3

वर्तमान लेख आईडी जैसे करंटअर्टिक्लिड को बदलें

SELECT * from (
  SELECT 
     @rownum:=@rownum+1 row,
     CASE a.id WHEN '100' THEN @currentrow:=@rownum ELSE NULL END as 'current_row',
     a.*  
  FROM articles a,
     (SELECT @currentrow:=0) c,  
     (SELECT @rownum:=0) r
   ORDER BY `date`, id  DESC
 ) as article_with_row
 where row > @currentrow - 2
 limit 3

यह सबसे उपयोगी उत्तर है जो मैंने इस प्रकार यहां पाया है। केवल वास्तविक सुधार मैं सुझाव दूंगा कि चर का उपयोग किया जा रहा है और आसानी से संपादन योग्य होने के लिए सभी अद्वितीय भागों को ऊपर तक ले जाया जा रहा है। फिर आसानी से अक्सर संदर्भित फ़ंक्शन या प्रक्रिया में बनाया जा सकता है।
liljoshu

1

एक और चाल है जिसका उपयोग आप पिछली पंक्तियों से कॉलम दिखाने के लिए कर सकते हैं, जो आप चाहते हैं कि किसी भी क्रम का उपयोग करके, @row ट्रिक के समान एक चर का उपयोग करें:

SELECT @prev_col_a, @prev_col_b, @prev_col_c,
   @prev_col_a := col_a AS col_a,
   @prev_col_b := col_b AS col_b,
   @prev_col_c := col_c AS col_c
FROM table, (SELECT @prev_col_a := NULL, @prev_col_b := NULL, @prev_col_c := NULL) prv
ORDER BY whatever

जाहिर है, क्रम में चयनित कॉलम का मूल्यांकन किया जाता है, इसलिए यह पहले सहेजे गए चर का चयन करेगा, और फिर चर को नई पंक्ति में अपडेट करेगा (प्रक्रिया में उन्हें चुनना)।

NB: मुझे यकीन नहीं है कि यह परिभाषित व्यवहार है, लेकिन मैंने इसका इस्तेमाल किया है और यह काम करता है।


1

यदि आप अपनी क्वेरी में एक से अधिक फ़ीडid करना चाहते हैं और next_idउन सभी को प्राप्त करना चाहते हैं ...

cur_idअपने चुनिंदा क्षेत्र में असाइन करें और फिर इसे next_idचुनिंदा फ़ील्ड के अंदर प्राप्त करने वाले सबक्वेरी को फ़ीड करें। और फिर सिलेक्ट करें next_id

कैल्क को लॉन्गनेक उत्तर का उपयोग करना next_id:

select next_id
from (
    select id as cur_id, (select min(id) from `foo` where id>cur_id) as next_id 
    from `foo` 
) as tmp
where next_id is not null;

1
CREATE PROCEDURE `pobierz_posty`(IN iduser bigint(20), IN size int, IN page int)
BEGIN
 DECLARE start_element int DEFAULT 0;
 SET start_element:= size * page;
 SELECT DISTINCT * FROM post WHERE id_users .... 
 ORDER BY data_postu DESC LIMIT size OFFSET start_element
END

6
StackOverflow में आपका स्वागत है। पूरी तरह से कोड वाले उत्तर शायद ही कभी उपयोगी होते हैं। कृपया अपने कोड क्या कर रहा है की कुछ व्याख्या प्रदान करने पर विचार करें। अंग्रेजी में इन-कोड प्रलेखन और / या चर नाम भी सहायक होंगे।
पोलितांक-जेड

1

यदि आपके पास एक इंडेक्स कॉलम है, तो आईडी कहें, आप पिछले और अगले आईडी को एक एसक्यूएल अनुरोध में वापस कर सकते हैं। प्रतिस्थापित करें: अपने मूल्य के साथ आईडी

SELECT
 IFNULL((SELECT id FROM table WHERE id < :id ORDER BY id DESC LIMIT 1),0) as previous,
 IFNULL((SELECT id FROM table WHERE id > :id ORDER BY id ASC LIMIT 1),0) as next

0

अगला और प्रीव्यू रिकॉर्ड पाने के लिए मेरा समाधान भी पहले रिकॉर्ड में वापस लाने के लिए अगर मैं आखिरी और इसके विपरीत हूं

मैं आईडी का उपयोग नहीं कर रहा हूँ मैं अच्छा यूआरएल के लिए शीर्षक का उपयोग कर रहा हूँ

मैं Codeigniter HMVC का उपयोग कर रहा हूं

$id = $this->_get_id_from_url($url);

//get the next id
$next_sql = $this->_custom_query("select * from projects where id = (select min(id) from projects where id > $id)");
foreach ($next_sql->result() as $row) {
    $next_id = $row->url;
}

if (!empty($next_id)) {
    $next_id = $next_id;
} else {
    $first_id = $this->_custom_query("select * from projects where id = (SELECT MIN(id) FROM projects)");
    foreach ($first_id->result() as $row) {
        $next_id = $row->url;
    }
}

//get the prev id
$prev_sql = $this->_custom_query("select * from projects where id = (select max(id) from projects where id < $id)");
foreach ($prev_sql->result() as $row) {
    $prev_id = $row->url;
}

if (!empty($prev_id)) {
    $prev_id = $prev_id;
} else {
    $last_id = $this->_custom_query("select * from projects where id = (SELECT MAX(id) FROM projects)");
    foreach ($last_id->result() as $row) {
        $prev_id = $row->url;
    }     
}

डाउनवोट किया गया क्योंकि यह SQL इंजेक्शन के लिए असुरक्षित है । मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन नौसिखिए डेवलपर्स को इसके बारे में पता होना चाहिए।
ayrtonvwf

0

यहाँ मेरा जवाब है। मैं ' डिसेंट डब्बल ' से एक विचार उठाता हूं और उस हिस्से को जोड़ता हूं जो जांच रहा है कि क्या आईडी न्यूनतम (आईडी) और अधिकतम (आईडी) के बीच है। यहाँ मेरी तालिका बनाने के लिए हिस्सा है।

CREATE TABLE Users (
UserID int NOT NULL auto_increment,
UserName varchar(45),
UserNameID varchar(45),
PRIMARY KEY (UserID)

);

अगला चरण एक संग्रहीत प्रक्रिया बना रहा है जो पिछली आईडी प्राप्त करने के लिए जिम्मेदार है।

    CREATE DEFINER=`root`@`localhost` PROCEDURE `printPreviousIDbySelectedIDUser`(
IN ID int,
IN search_name varchar(45)
)
BEGIN
SELECT CONCAT(ns.UserID) AS 'Previous ID' from Users ns
 where ns.UserName=search_name AND ns.UserID IN (select min(ns.UserID) from Users ns where ns.UserID > ID 
 union select max(ns.UserID) from Users ns where  ns.UserID < ID) LIMIT 1 ;
END

पहला तरीका अच्छा है अगर इंडेक्स को छांटा गया है, लेकिन अगर वे नहीं हैं। उदाहरण के लिए, यदि आपके पास अनुक्रमित हैं: 1,2,7 और आपको दूसरे दृष्टिकोण का उपयोग करने के लिए इस तरह से सूचकांक नंबर 2 प्राप्त करने की आवश्यकता है।

    CREATE DEFINER=`root`@`localhost` PROCEDURE `getPreviousUserID`(
IN ID int,
IN search_name varchar(45)
)
BEGIN
SELECT CONCAT(ns.UserID) AS 'Previous ID' from Users ns
  WHERE ns.UserName=search_name AND  ns.UserID < ID   ORDER BY ns.UserID DESC LIMIT 1;
END

1
नेक्रोमन्ट बैज के लिए शिकार? इस सवाल का 10 वर्षों से स्वीकृत उत्तर है।
जकूब अर्नोल्ड

मुझे यह विषय अभी-अभी मिला, क्योंकि मुझे हाल ही में यही समस्या मिली।
डेनिस

0

100% काम कर रहा है

SELECT * FROM `table` where table_id < 3 ORDER BY `table_id` DESC limit 1

-1

मुझे लगता है कि एसक्यूएल टेबल में असली अगली या पिछली पंक्ति है हमें समान के साथ वास्तविक मूल्य की आवश्यकता है, (<या> यदि आपको ऑर्डरिंग टेबल में पंक्ति की स्थिति बदलने की आवश्यकता है तो एक से अधिक लौटें।

हमें पंक्ति $positionखोजने के लिए मान की आवश्यकता है neighboursमेरी तालिका में मैंने एक स्तंभ 'स्थिति' बनाई

और आवश्यक पंक्ति पाने के लिए SQL क्वेरी है:

अगले के लिए :

SELECT * 
FROM `my_table` 
WHERE id = (SELECT (id) 
            FROM my_table 
            WHERE position = ($position+1)) 
LIMIT 1

पिछले के लिए:

 SELECT * 
 FROM my_table 
 WHERE id = (SELECT (id) 
             FROM my_table 
             WHERE `position` = ($position-1)) 
 LIMIT 1

यदि कोई पंक्ति हटा दी गई है, तो यह टूट जाएगी। उदाहरण: यदि ID 1,2,6,7,8 नंबर है।
केविन वाटरसन

-2

फू 1 से शीर्ष 1 का चयन करें जहां आईडी> आईडी क्रमांक 4 द्वारा


1
समतुल्य MySQL "सीमा 1" है: select * from foo where id>4 order by id asc LIMIT 1
भीड़ दें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.