met MySql een gat in een reeks vinden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

El Grimbo

El Grimbo

08/10/2009 20:49:00
Quote Anchor link
Hi

Ik heb een tabel met daarin opeenvolgende oplopende cijfers: bv.
1 2 3 4 5 6. (en dan veel)

Er kan er een ontbreken. bv de 4.: 1 2 3 5 6. Dan wil ik de 4 opsporen. Hoe dat te doen?
Met een IF? Of toch CASE WHEN THEN? Ik ben slecht in loops in sql. Wie helpt me.

SELECT

FROM getallen
WHERE ;

b.v.d. Inigo
 
PHP hulp

PHP hulp

25/12/2024 21:29:52
 
- SanThe -

- SanThe -

08/10/2009 21:23:00
Quote Anchor link
Dit gaat toch niet over de prinary key hoop ik.
 
Eddy E

Eddy E

08/10/2009 21:27:00
Quote Anchor link
Zet alles in een array, wat denk ik wel zelf te doen is.

Dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// welke getallen zijn er?
$getallen = array(1, 2, 3, 5, 6); // mist 4

// bereken/kijk welke tussen welke getallen er zijn

$start_getal = $getallen[0];
$eind_getal = end($getallen);

// maak een nieuwe array
$alle_getallen = range($start_getal, $eind_getal);

// bereken verschil
$verschil = array_diff($getallen, $alle_getallen);

// toon verschillen
echo '<pre>' . print_r($verschil, true) . '<pre>';

?>


Ongetest, maar denk dat het wel werkt.

Edit:

Zie nu dat het in SQL moest... dan weet ik het ook niet. In PHP zou dit bovenstaande wel werken.
Gewijzigd op 01/01/1970 01:00:00 door Eddy E
 
El Grimbo

El Grimbo

08/10/2009 22:14:00
Quote Anchor link
@SanThe

lijkt me niet nee, kan dat uberhaupt?

@Eddy:
als het met PHP moet weet ik wel een efficientere oplossing (de getallen komen uit de tabel nl):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
    $sql
= "
        SELECT getal AS nr
        FROM tbl
        ORDER BY getal
        "
;
    if (!($temp = mysql_query($sql))) exit(mysql_error());
     $i = 1;
    while($nr = mysql_fetch_array($temp)){
        if ($nr['nr'] == $i){
            $i +=1;
        }
    }

    $ontbrekend_getal = $i;
?>
Gewijzigd op 01/01/1970 01:00:00 door El Grimbo
 
Whatever Whatever

Whatever Whatever

08/10/2009 22:21:00
Quote Anchor link
Een tweede tabel (tmp_reeks) maken met daarin een reeks (bijvoorbeeld 1 t/m 100000) (bijvoorbeeld ID) en dan een query:

Select `ID` From tmp_reeks WHERE `ID` < (SELECT Max(getal) FROM tbl)
AND NOT `ID` IN
(SELECT Getal From tbl)

Volgens mij moet die het doen....
 
El Grimbo

El Grimbo

08/10/2009 22:30:00
Quote Anchor link
snap ik,

maar wat ik me afvroeg:

kan je niet gewoon in 1 select statement door de bestaande kolom fietsen en zoeken naar een ontbrekende schakel in een reeks? Zoals in mijn bovenstaande PHP loop (die goed werkt overigens dus het probleem is eigenlijk opgelost ware het niet dat ik het in SQL wilde doen)

Dus zonder extra tabellen aan te gaan maken.
 
Whatever Whatever

Whatever Whatever

08/10/2009 22:38:00
Quote Anchor link
zonder extra tabellen is het volgens mij niet mogelijk, ik heb hier iets van 4 jaar geleden ook een hele tijd mee gespeeld en toen kwam ik uiteindelijk tot bovenstaande oplossing
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.