1. #1

    Registered
    20/05/10
    Location
    Edegem
    Posts
    114
    iTrader
    0
    Mentioned
    0 Post(s)

    Advies nodig! Eindproject

    Beste 9livers,

    Graag zou ik advies krijgen bij mijn volgende probleem (PHP):

    http://imagupload.com/images/1361181244-knipsel.jpg

    Bij het uitschrijven van 1 gebruiker (die als standby waarde 0 heeft, dus niet standby is) zou de EERSTVOLGENDE gebruiker met Standby waarde 1 een UPDATE moeten krijgen zodat zijn STANDBY waarde 0 wordt. Daarna wordt de gebruiker verwijdert van de tabel (dat werkt).
    DUS
    indien een gebruiker die niet standby staat zich uitschrijft moet de 1ste persoon die standby is ingeschreven worden.
    ---> Hiervoor werk ik met een boolean, standby (0 of 1)

    Ik werk met 1 tabel, bestaande uit: id(A.I.), voornaam, naam, standby(0 of 1)
    Het uitschrijven gebeurt a.d.h.v. een relatie tussen de ID van mijn tabel gebruikers(id, voornaam, achternaam, ...) en de ID van mijn tabel voor het inschrijvingsvak.

    Concreet zit ik met het volgende: Ik weet niet hoe ik het eerstevolgende ID selecteer (eigenlijk het kleinste GROTER dan het ID van de persoon die ik uitschrijf (bv. ik schrijf id 27 uit, dan moet het eerstvolgende id ingeschreven worden. Uit de reeks van (27, 34, 35, 36) zou 34 dan ingeschreven moeten worden.

    Ik hoop dat ik het een beetje goed heb kunnen uitleggen. Indien je een compleet ander idee hebt over hoe ik dit kan oplossen mag je dit ook zeker vermelden!

    Alvast bedankt voor de hulp.
    no votes  

  2. #2

    Registered
    22/06/10
    Location
    Muizen (Mechelen)
    Posts
    286
    iTrader
    4 (100%)
    Mentioned
    0 Post(s)
    Steek die id nummer is een variabel.
    Sorteer uw query op id ASC.
    En maak dan een loop met id variabel telkens + 1
    Check dan telkens dat nieuwe variabel bestaat, indien niet, dan terug +1
    no votes  

  3. #3
    woony's Avatar
    Registered
    03/12/03
    Location
    Oostende
    Posts
    2,599
    iTrader
    78 (100%)
    Mentioned
    0 Post(s)
    Reputation
    7/10
    loopen en dergelijke lijkt mij nogal overkill,
    wat als de tabel zo is is:
    id | naam
    1 | test
    120 | test
    11220202 | naam 3
    dan ga je er wel aan met je loopje

    probeer dit eens :
    Code:
    update tabel
    set standby=1
    where id = (select  MIN(id) from tabel where  id > @uwvorigeid )
    een of andere self join moet ook wel lukken, maar ik vind dergelijke inner queries wel overzichtelijker.
    no votes  

  4. #4

    Registered
    06/11/11
    Location
    Kortrijk
    Posts
    108
    iTrader
    4 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Hetgeen woony zegt, al denk ik (maar kan mis zijn) dat je in php geen geneste queries kunt uitvoeren. Dus dan moet je eerst je id selecteren en dan de update uitvoeren.
    no votes  

  5. #5
    dJeez's Avatar
    Registered
    17/07/02
    Location
    Sol System
    Posts
    10,064
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/78
    Quote Originally Posted by sebak View Post
    This quote is hidden because you are ignoring this member. Show
    Hetgeen woony zegt, al denk ik (maar kan mis zijn) dat je in php geen geneste queries kunt uitvoeren. Dus dan moet je eerst je id selecteren en dan de update uitvoeren.
    Het al dan niet kunnen uitvoeren van geneste queries is geen beperking die de taal die je gebruikt oplegt, maar wel het RDBMS dat je gebruikt. Het zal dus perfect werken in PHP op voorwaarde dat je DB het aankan.
    PSN: dJeezBE - Delicious bookmarks
    Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alieno
    Pastafarian by choice
    no votes  

  6. #6

    Registered
    26/09/12
    Location
    Kortrijk
    Posts
    41
    iTrader
    10 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Het kan zelfs met een enkelvoudige query.
    Probeer eens:
    Code:
    SELECT * 
    FROM tabel
    WHERE id >vorigID
    ORDER BY id
    LIMIT 1
    Zo krijg je enkel de eerste entry terug waar het id groter is dan de vorige.

    Zoals woony al zei, lopen is overkill. Je moet altijd proberen zoveel mogelijk werk laten verrichten door de database. En liefst in zo weinig mogelijk queries. De database is namelijk vele malen sneller dan PHP.
    no votes  

  7. #7
    woony's Avatar
    Registered
    03/12/03
    Location
    Oostende
    Posts
    2,599
    iTrader
    78 (100%)
    Mentioned
    0 Post(s)
    Reputation
    7/10
    Quote Originally Posted by pjetr View Post
    This quote is hidden because you are ignoring this member. Show
    Het kan zelfs met een enkelvoudige query.
    Probeer eens:
    Code:
    SELECT * 
    FROM tabel
    WHERE id >vorigID
    ORDER BY id
    LIMIT 1
    Zo krijg je enkel de eerste entry terug waar het id groter is dan de vorige.

    Zoals woony al zei, lopen is overkill. Je moet altijd proberen zoveel mogelijk werk laten verrichten door de database. En liefst in zo weinig mogelijk queries. De database is namelijk vele malen sneller dan PHP.
    ja ok, dan heb je je id, maar dan moet je nog gaan updaten, wat ik in mijn where doe is uw select eigenlijk.
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in