Autor Zpráva
slon_cz
Profil
Dobrý den, chtěl by se zeptat, pokud mám sql tabulku

nazev | datum | id |
zaz 1 | blabl1 | 1 |
zaz 2 | blabl2 | 2 |
zaz 3 | blabl3 | 3 |
zaz 4 | blabl4 | 4 |
zaz 5 | blabl5 | 5 |

Budu chtit do databaze zapsat radek s
zaz 2 | blabl6 | ---
a potreboval bych zjistit, kdy naposledy tam byl zaznam se stejnym obsahem pridan. Tedy, potreboval bych zjistit jaky je pocet radku mezi poslednim zaznamem a zaznamem s obsahem nazev = zaz2, tedy abych nějakým způsobem získal číslo "3" - mezi poslednim zaznamem (zaz 5 | blabl5 | 5 |) a hledanym zaznamem (zaz 2 | blabl2 | 2 |), jsou mezi nimi "3" dalsi zaznamy. Je možné toto získat? Snažím se to vyřešit, bohužel ani podle google si mi nedaří najít návod..
Joker
Profil
slon_cz:
Tak nejdřív bude potřeba najít ten předchozí záznam: SELECT datum FROM tabulka WHERE nazev="zaz 2"
a pak zjistit počet novějších:
SELECT COUNT(id) FROM tabulka WHERE datum > *datum* - pokud ten nový teprve přidávám, nebo DATUM BETWEEN *datum staršího* AND *datum novějšího*.
slon_cz
Profil
Vůbec mě nenapadlo brát to podle data přidání, pořád jsem se soustředil jen na počet řádků, omlouvám se a děkuji za radu :)
Keeehi
Profil
Datum se použít dá, ovšem problém je, že pokud bude existovat další záznam se stejného data (resp. sekundy jelikož pravděpodobně jde o datetime nebo timestemp) tak to může (ale nemusí) být o jedna špatně. ID je unikátní, takže tam tento problém hrozit nebude. Samozřejmě to vyžaduje, aby ID byla nějaká rostoucí řada ale to podle ukázky platí.
Také by ty dva dotazy by měly jít spojit do jednoho.
SELECT
    COUNT(*)
FROM
    tabulka
WHERE
    id > (
        SELECT
            MAX(id)
        FROM
            tabulka
        WHERE
            nazev="zaz 2" 
    )
Joker
Profil
Ještě se omlouvám, ten první dotaz by měl být SELECT MAX(datum) FROM tabulka… , protože jich tam může být víc a chcete ten poslední.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0