Zoeken naar eerstvolgend id nr.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido van C

Guido van C

02/11/2007 18:42:00
Quote Anchor link
Ik heb een tabel waarin de volgende gegevens van belang zijn:

- volgnummer
- nieuwsbriefnummer

Nu heb ik een lijst met deze gegevens zichtbaar. En wil daar eens systeem bij maken dat je bij elke regel een up/down knopje hebt. Als je het knopje indrukt geeft deze het volgnummer van deze regel door. Bijvoorbeeld omhoog. Daarna moet ik in de tabel kijken naar de dichtstbijzijnde rij met het zelfde nieuwsbriefnummer. Ofwel ik heb volgnummer 5, volgnummer 6 bestaat niet en 7 wel. dan pakt hij nummer 7.

Dit kan natuurlijk door het uiterste nummer op te halen dat in de tabel staat een een loop te maken of elk nummer bestaat, en wanneer hij er een heeft dit nummer te retourneren. Maar kan dit ook handiger door middel van een sql vraagstuk?

Tabel voorbeeld:

nieuwsbriefnummer - volgnummer
8840 - 1
8840 - 3
1234 - 1
1234 - 2
8840 - 5
1234 - 6
8840 - 7
 
PHP hulp

PHP hulp

24/11/2024 08:04:27
 
Guido van C

Guido van C

02/11/2007 20:56:00
Quote Anchor link
Ik heb het nu zo opgelost, maar er zou volgens mij een functie in sql voor moeten bestaan. iets geheten als NEAREST of zo.

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
19
20
21
22
23
24
25
26
27
28
29
<?php
if(isset($_GET['movedown']) AND is_numeric($_GET['movedown'])){
        
        $movedown = $_GET['movedown'];
        $dichtsbijzijnderij = 99999999999999;
        
        $sql = "SELECT * FROM nieuwsbriefdataberichten WHERE nbid='".$_GET['id']."' AND volgordeid > '".$movedown."'";
        $resultaat = mysql_query($sql, $conn) or die(mysql_error());
        
        while($rij = mysql_fetch_assoc($resultaat)){
            if($rij['volgordeid'] < $dichtsbijzijnderij){
                $dichtsbijzijnderij = $rij['volgordeid'];
            }
        }

        
        // Wissel de volgnummers om
        if($dichtsbijzijnderij != 99999999999999){
        
            $sql = "UPDATE nieuwsbriefdataberichten SET volgordeid='0' WHERE nbid='".$_GET['id']."' AND volgordeid='".$movedown."' ";
            mysql_query($sql, $conn) or die(mysql_error());
            
            $sql = "UPDATE nieuwsbriefdataberichten SET volgordeid='".$movedown."' WHERE nbid='".$_GET['id']."' AND volgordeid='".$dichtsbijzijnderij."' ";
            mysql_query($sql, $conn) or die(mysql_error());
            
            $sql = "UPDATE nieuwsbriefdataberichten SET volgordeid='".$dichtsbijzijnderij."' WHERE nbid='".$_GET['id']."' AND volgordeid='0' ";
            mysql_query($sql, $conn) or die(mysql_error());
        }
    }

?>
 
Joren de Wit

Joren de Wit

02/11/2007 21:15:00
Quote Anchor link
Als je het dichtstbijzijnde volgnummer wilt hebben dat hoger is dan het huidige volgnummer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT volgnummer
FROM tabel
WHERE volgnummer > huidig_volgnummer
ORDER BY volgnummer ASC
LIMIT 1
 
Guido van C

Guido van C

02/11/2007 21:37:00
Quote Anchor link
Dat kan inderdaad ook, maar hierbij indexeer je, en dit kan lang duren als de database groter is. Vandaar dat ik zocht naar een sneller algoritme.
 
Joren de Wit

Joren de Wit

02/11/2007 21:44:00
Quote Anchor link
Voor zover ik weet is er geen andere oplossing. Met een index op de kolom volgnummer (die je sowieso waarschijnlijk al hebt) zal dit waarschijnlijk ook nog een van de snellere oplossingen zijn...
 
Gijs

gijs

06/11/2007 17:26:00
Quote Anchor link
je hebt iets als SELECT MAX(id) from bla bla. deze haald de laatste uit je tabel.

Weet niet precies hoe je het schrijft maar het zou daar op moeten lijken. misschien iemand anders of phpmanual.
 
Joren de Wit

Joren de Wit

06/11/2007 17:27:00
Quote Anchor link
@Gijs: dat is niet wat de TS wil. Hij is op zoek naar een manier om het eerstvolgende id op te halen als je een bepaald id weet. Dus niet het hoogste id...
 



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.