Archief - Advies nodig! Eindproject

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

tghmember

Legacy Member
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.

meuh

Legacy Member
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

woony

Legacy Member
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.

sebak

Legacy Member
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.

dJeez

Legacy Member
sebak zei:
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.

pjetr

Legacy Member
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.

woony

Legacy Member
pjetr zei:
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.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan