probleem met loop in loop
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<? php
while($row = mysql_fetch_assoc($query))
{
$id = $row['id'];
while($on_off = mysql_fetch_assoc($on_off_select))
{
if($id == $on_off['id'])
{
$image = "images/design/online.gif";
}
else
{
$image = "images/design/offline.gif";
}
}
?>
while($row = mysql_fetch_assoc($query))
{
$id = $row['id'];
while($on_off = mysql_fetch_assoc($on_off_select))
{
if($id == $on_off['id'])
{
$image = "images/design/online.gif";
}
else
{
$image = "images/design/offline.gif";
}
}
?>
dit lukt niet, hoe kan dat wel? nu doet hij die vergelijking namelijk maar 1 keer, want alle plaatjes zijn hetzelfde, terwijl dit niet zo moet zijn
Gewijzigd op 01/01/1970 01:00:00 door Ron -
Wat wil je precies bereiken?
Gewijzigd op 01/01/1970 01:00:00 door Ron -
Ik denk dat je bedoelt dat je twee tabellen hebt en niet twee databases? Als dat zo is, en als je datamodel goed is, kun je het waarschijnlijk met één query af.
hoe doe je dat dan met één query? met left join?
dit snap ik nog niet zo goed:P daarom probeer ik het altijd anders te doen:P
kun je me misschien voorbeeldje geven, of heb je dan meer info nodig?
Ja, geef even de structuur van je twee tabellen? Dan kan ik een voorbeeld geven.
`id` int(11) NOT NULL default '0',
`user` text NOT NULL,
`lastactive` datetime NOT NULL default '0000-00-00 00:00:00',
`ip` varchar(15) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `leden` (
`id` int(5) NOT NULL auto_increment,
`userid` varchar(50) NOT NULL default '',
`password` varchar(32) NOT NULL default '',
`email` text NOT NULL,
`valideermail` varchar(32) NOT NULL default '0',
`valideersessie` varchar(32) NOT NULL default '0',
`homepage` text,
`name` text,
`lastname` text,
`relatie` text,
`woonplaats` text,
`day` text,
`month` text,
`year` text,
`prive` text,
`extra` text,
`level` text,
`photo` text,
`geslacht` text,
`lastupdate` text NOT NULL,
`lastactive` datetime default NULL,
`registered` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=latin1 AUTO_INCREMENT=28 ;
en dan moeten de beide id's met elkaar vergeleken worden, als het id van de leden tabel dan in de online tabel voorkomt, moet het plaatje online zijn anders offline
FROM leden AS l, online AS o
WHERE l.userid = o.id
Nog wel een paar vraagtekens:
- Je hebt geen auto_increment veld in je tabel online
- Waarom gebruik je zo vaak het type TEXT voor je velden? In de meeste gevallen is dat overkill en kun je volstaan met een type VARCHAR(255).
Quote:
Error: incompatible types? ;-)WHERE l.userid = o.id
Als online.id overeenkomt met leden.id kan dat een verklaring zijn waarom online.id niet auto-increment is; dat zou dan zelfs ongewenst zijn. Je zou je dan wel af kunnen vragen of je die tabel dan niet beter kunt mergen met de leden-tabel.
je mist een accolade-sluiten ('}') ???
Jan Koehoorn schreef op 02.01.2007 17:44:
SELECT l.userid
FROM leden AS l, online AS o
WHERE l.userid = o.id
Nog wel een paar vraagtekens:
- Je hebt geen auto_increment veld in je tabel online
- Waarom gebruik je zo vaak het type TEXT voor je velden? In de meeste gevallen is dat overkill en kun je volstaan met een type VARCHAR(255).
FROM leden AS l, online AS o
WHERE l.userid = o.id
Nog wel een paar vraagtekens:
- Je hebt geen auto_increment veld in je tabel online
- Waarom gebruik je zo vaak het type TEXT voor je velden? In de meeste gevallen is dat overkill en kun je volstaan met een type VARCHAR(255).
nouw, ik gebruik geen auto_increment in de tabel online, omdat die id's in de tabel online, de id's van de gebruikers zijn, ik heb een id met auto_increment nergens voor nodig
ik gebruik text, omdat ik niet weet wat de rest inhoud:P (van weinige maar)
nu krijg ik dus alle userid's waarvan de id's overeen komen ofniet?
maar ik moet ook de andere userid's hebben, moet alle leden weergeven
http://www.de-menner.nl/index.php?p=memberslist
kun je dit ook doen voor een bepaald id?
dus die query uitvoeren
Gewijzigd op 01/01/1970 01:00:00 door Ron -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php $on_off_select = mysql_query("SELECT l.id FROM leden AS l, online AS o WHERE o.id = '".$row['id']."'") or die(mysql_error());
$result = mysql_result($on_off_select);
$on_off = mysql_fetch_assoc($on_off_select);
if(!empty($result))
{
$image = "images/design/online.gif";
}
else
{
$image = "images/design/offline.gif";
}
?>
$result = mysql_result($on_off_select);
$on_off = mysql_fetch_assoc($on_off_select);
if(!empty($result))
{
$image = "images/design/online.gif";
}
else
{
$image = "images/design/offline.gif";
}
?>
Jim schreef op 02.01.2007 18:05:
je mist een accolade-sluiten ('}') ???
klopt, hier in t voorbeeld wel, maar ik heb hem op de site wel ;)
Willem vp schreef op 02.01.2007 17:55:
Als online.id overeenkomt met leden.id kan dat een verklaring zijn waarom online.id niet auto-increment is; dat zou dan zelfs ongewenst zijn. Je zou je dan wel af kunnen vragen of je die tabel dan niet beter kunt mergen met de leden-tabel.
Quote:
Error: incompatible types? ;-)WHERE l.userid = o.id
Als online.id overeenkomt met leden.id kan dat een verklaring zijn waarom online.id niet auto-increment is; dat zou dan zelfs ongewenst zijn. Je zou je dan wel af kunnen vragen of je die tabel dan niet beter kunt mergen met de leden-tabel.
Ja klopt, die l.userid was een foutje. En de noodzaak voor twee verschillende tabellen ontgaat me hier ook enigszins ;-)
Jan Koehoorn schreef op 02.01.2007 18:53:
Ja klopt, die l.userid was een foutje. En de noodzaak voor twee verschillende tabellen ontgaat me hier ook enigszins ;-)
nouw die zijn wel nodig(volgens mij), want de gasten worden ook geregistreerd in de online tabel, maar jan, hoe kan ik jouw voorbeeld verwerken, heb al iets gepost hierboven..
Int -> Integer (n) --> Een getal met n als maximaal aantal tekens,
Bool -> Boolean --> is een (Y/N). Een boolean bestaat als type niet in MySQL, dan kan je een Set gebruiken met 1 en 0 en 0 als default.
Succes.
Het nadeel namelijk van het neerzetten of een gebruiker online is of niet, is het bepalen van het feit of een gebruiker online is of niet. Gebruiker zullen namelijk 9 van de 10 keer niet uitloggen alsze je website verlaten, dus hoe weet jij dan welke gebruiker nog online is en welke niet...
waar ik eerst keek of ze al online waren, en dit update, zet ik het nu ook in de leden tabel!
alleen moet ik nu nog iets maken, dat als je langer dan 10 minuten bijv niet actief bent, dit weer op 0 wordt gezet
Ron schreef op 02.01.2007 19:02:
Oplossing: de tijd wanneer ze voor het laatst actief waren opslaan in je database. Zie ook mijn vorige reactie ;)alleen moet ik nu nog iets maken, dat als je langer dan 10 minuten bijv niet actief bent, dit weer op 0 wordt gezet
Aanvulling: let er op dat je dus niet alleen je tabel update wanneer men inlogt. Elke keer als een user een pagina opvraagt moet je tabel geupdate worden!
$sql = "UPDATE leden SET online=1, lastactive=NOW() WHERE id=".$_SESSION['je_id']."'";
$sql = "UPDATE leden SET online=0 WHERE NOW()-lastactive > 600";
en niet te vergeten, op mijn ledenlijst pagina:
if(!empty($row['online']))
{
$image = "images/design/online.gif";
}
else
{
$image = "images/design/offline.gif";
}
@jan, daar had ik al aangedacht ;)
Gewijzigd op 01/01/1970 01:00:00 door Ron -