Ik heb dus een probleem met 0 waardes in auto-increment columns. Voor mijn website gebruik in een eigen gemaakt sessie systeem welke een cookie plaatst met een SessionID welke wordt ingevoerd in de database. Aan deze SessionID is een UserID gekoppeld. Voor ingelogde gebruikers is dit natuurlijk hun UserID, maar voor niet ingelogde gebruikers gebruik ik UserID 0.
Mijn tabellen zien er ongeveer zo uit:
tabel sessions:
tabel users:
Als een bezoeker welke al een SessionID heeft mijn site bezoekt haal ik alle sessie en gebruikers info op met één query:
Om deze query ook resultaat op te laten leveren bij niet ingelogde gebuikers heb ik dus een user met ID 0 aangemaakt. Hier ligt dus het probleem. Als ik namelijk m'n tabel wijzig ofzo wordt deze ID omgezet naar de eerstvolgende auto-increment waarde. Dus user met ID 0 pleite en mn query werkt niet meer.
Nu kan ik dit natuurlijk wel oplossen door bv. niet ingelogde gebruikers ID 1 te geven. Of bijvoorbeeld eerst de session info ophalen en vervolgens met PHP checken of het een inlogde gebruiker is en dan de user info ophalen met een volgende query. Maar ik wil het liefst alles i.v.m. performance met één query ophalen. En ik begrijp wel dat een 0 waarde niet echt in een auto-increment column hoort, maar ik vind het 'logischer' om voor niet ingelogde gebruikers ID 0 te gebruiken dan bv. ID 1. Aan een niet ingelogde gebruiker is namelijk in principe geen gebruiker toe te wijzen, 'dus' user ID 0.
Mijn vraag: hoe voorkom ik dat mn userid 0 'verspringt' naar de eerst volgende auto-increment waarde? Of moet ik gewoon het idee laten vallen dat niet ingelogde gebruikers ID 0 hebben? Of hoe doen jullie het?
Mijn tabellen zien er ongeveer zo uit:
tabel sessions:
code:
1
2
3
4
5
| SessionID VARCHAR(32) NOT NULL, UserID INT(6) DEFAULT '0' NOT NULL, Agent VARCHAR(100) NULL, LastVisit INT(10) NULL, PRIMARY KEY (UserID) |
tabel users:
code:
1
2
3
4
5
6
| ID INT(6) NOT NULL AUTO_INCREMENT, Level INT(1) DEFAULT '1' NOT NULL, Name VARCHAR(25) NOT NULL, Password VARCHAR(32) NOT NULL, enz.. PRIMARY KEY (ID) |
Als een bezoeker welke al een SessionID heeft mijn site bezoekt haal ik alle sessie en gebruikers info op met één query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| SELECT
u.Name,
u.ID,
u.Level,
s.LastVisit,
s.Agent
FROM
users AS u,
sessions AS s
WHERE
s.SessionID = '$SessionID' AND
u.ID = s.UserID |
Om deze query ook resultaat op te laten leveren bij niet ingelogde gebuikers heb ik dus een user met ID 0 aangemaakt. Hier ligt dus het probleem. Als ik namelijk m'n tabel wijzig ofzo wordt deze ID omgezet naar de eerstvolgende auto-increment waarde. Dus user met ID 0 pleite en mn query werkt niet meer.
Nu kan ik dit natuurlijk wel oplossen door bv. niet ingelogde gebruikers ID 1 te geven. Of bijvoorbeeld eerst de session info ophalen en vervolgens met PHP checken of het een inlogde gebruiker is en dan de user info ophalen met een volgende query. Maar ik wil het liefst alles i.v.m. performance met één query ophalen. En ik begrijp wel dat een 0 waarde niet echt in een auto-increment column hoort, maar ik vind het 'logischer' om voor niet ingelogde gebruikers ID 0 te gebruiken dan bv. ID 1. Aan een niet ingelogde gebruiker is namelijk in principe geen gebruiker toe te wijzen, 'dus' user ID 0.
Mijn vraag: hoe voorkom ik dat mn userid 0 'verspringt' naar de eerst volgende auto-increment waarde? Of moet ik gewoon het idee laten vallen dat niet ingelogde gebruikers ID 0 hebben? Of hoe doen jullie het?
On track