2017-11-30 6 views
4

Wir benötigen Zeile zu erhalten, wenn product_id in der Reihenfolge ist.MySql get Zeile, wenn ID in der Reihenfolge ist

Tabelle (Produkt)

product_id name 

    1   Parle 
    2   Coconut 
    3   Pizza 
    4   Colgate 
    5   Ice Cream 
    6   Nuts 
    8   Britania 
    9   Pepsi 

Erfordern Ausgabe

product_id name 

    1   Parle 
    2   Coconut 
    3   Pizza 
    4   Colgate 
    5   Ice Cream 
    6   Nuts 

product_id - 8 and 9 nicht bekommen, weil sie nicht in der Reihenfolge ist.

Mein

select distinct t1.*, t1.product_id, (select GROUP_CONCAT(t2.product_id) from product as t2) as p_id 
from product t1 
having FIND_IN_SET(t1.product_id+1, p_id) 

Ausgabe

product_id name 

    1   Parle 
    2   Coconut 
    3   Pizza 
    4   Colgate 
    5   Ice Cream 

In diesem Versuch versuche ich nicht product_id - 6 Reihe bin immer.

Hinweis: Ich möchte MySql Abfrage nicht in PHP.

Vielen Dank!

+0

Sie fügen Ihrer Produkt-ID eine Gruppierungseigenschaft hinzu, die in einer separaten Spalte besser aufgehoben wäre. – jeroen

+0

Von wo wird die Sequenz gestartet? –

+0

Nur 1 bis 6 Zeilen nichts anderes. –

Antwort

2

Ein Weg, ich denken kann, ist an Benutzer Benutzer definierte Variable den Rang von Reihe zu bekommen und dann die Differenz der Produkt-ID und Rang berechnen und wählen Sie nur die Zeilen, in denen Differenz = 0

select * 
from(
    select f.*,@row:= @row + 1 rank, 
    product_id - @row as diff 
    from product f, 
    (select @row:= 0) t 
    order by product_id 
) t1 
where diff = 0 

Demo

Oder wenn Sie die am wenigsten Sequenz Nr. Auswählen möchten. automatisch können Sie es als

select * 
from(
    select f.*,@row:= @row + 1 rank, 
    product_id - @row as diff 
    from product f, 
    (select @row:= (select min(product_id) from product_sale_flag) a) t 
    order by product_id 
) t1 
where diff = -1 

Demo

Erklärung First query des assign schreiben Minimalwert von product_id variable @row, dann weist sie eine rank zu jeder Reihe von product_id aufsteigend geordnet, einmal Rang wird für jede Zeile zugewiesen, dann berechnet sie die difference between the original value of product_id und lastly mit der resultierenden Differenz überprüft es, wo Unterschied 0 ist, erhalten diese Zeilen, weil sie folgen die Sequenz. Hoffe, das macht Sinn

+0

Danke. Es funktioniert sehr gut. Aber ich kann nicht verstehen, bitte erklären Sie, wenn Sie wollen. –

+0

@JaydeepMor Ich habe Update meine Antwort –

+1

Okay vielen Dank! –

Verwandte Themen