|
|
|
| Читал много тем здесь, все казалось бы перепробывал, но никак не могу додуматься...
Суть проблемы
Есть таблица с пользователями онлайн
id пользователя | putdate | name
На сайте есть список пользователей, и рядом с каждым пользователем надо вывести онлайн он или нет.
Я делаю так, выводится список пользователей, я сравниваю ник пользователя с никами которые есть в таблице онлайн(если он там есть) все идет через циклы, но онлайн выводит только одного пользователя. | |
|
|
|
|
|
|
|
для: Dez
(22.12.2006 в 21:49)
| | Вас интересует ошибка в вашем коде, который вы не показали,
или идея по реализации данного алгоритма? | |
|
|
|
|
|
|
|
для: AlexelA
(22.12.2006 в 21:56)
| | Сама идея | |
|
|
|
|
|
|
|
|
для: AlexelA
(22.12.2006 в 22:03)
| | Нет, не в этом дело, как записывать и выводить я знаю, мне нужно что бы рядом со всеми зарег. пользователями сайта вывести кто онлайн, а кто нет. | |
|
|
|
|
|
|
|
для: Dez
(22.12.2006 в 22:14)
| | Ну а в чем тогда проблема?
Если у вас имеется одна таблица с данными о зарегистрированных пользователях,
вы создаете вторую, согласно скрипта по выше приведенному адресу, и объединяя
простым запросом mysql данные из двух таблиц, получаете искомый результат:
рядом со всеми зарег. пользователями сайта вывести кто онлайн, а кто нет. | |
|
|
|
|
|
|
|
для: AlexelA
(22.12.2006 в 22:21)
| | для этого нужен не простой запрос, а внешнее соединение.
SELECT ... FROM users LEFT JOIN online ON users.id = online.id
|
либо действовать именно так, как описал автор в начальном сообщении. | |
|
|
|
|
|
|
|
для: Trianon
(22.12.2006 в 22:27)
| | для этого нужен не простой запрос, а внешнее соединение
Не надо простое превращать в сложное:
select * from users,online where users.id = online.id;
|
| |
|
|
|
|
|
|
|
для: AlexelA
(22.12.2006 в 22:40)
| | Не надо, извините, чушь пороть.
>select * from users,online where users.id = online.id;
В результате Вашего селекта (тоже не самого простого - запятая по сути тот же JOIN) будет выведен не весь список, а только тех, кто онлайн. А всё потому, что соединение внутреннее. | |
|
|
|
|
|
|
|
для: Trianon
(22.12.2006 в 22:57)
| | Согласен, с запросом ошибся и вывел только online
Да вопрос-то был не о запросе, а о самой идее. | |
|
|
|
|
|
|
|
для: AlexelA
(22.12.2006 в 22:40)
| | Эх... что то я совсем не могу понять,
<?
$query="SELECT * FROM `online`";
$result=mysql_query($query);
if(dbrows($result)>0)
{
while($online= dbarray($result))
{
}
}
$query="SELECT * FROM `users` WHERE ORDER by id DESC";
$result=mysql_query($query);
if(dbrows($result)>0)
{
echo "<table><tr><td>Имя<td>Где?";
while($users = dbarray($result))
{
echo '<tr><td>'.$users['name'].'<td>'.$status;
}
}
?>
|
Непонимаю... простите :) | |
|
|
|
|
|
|
|
для: Trianon
(22.12.2006 в 22:27)
| | >для этого нужен не простой запрос, а внешнее соединение.
>
>SELECT ... FROM users LEFT JOIN online ON users.id = online.id
>
|
>либо действовать именно так, как описал автор в начальном сообщении.
Можно поподробнее пожайлуста... | |
|
|
|
|
|
|
|
для: Dez
(22.12.2006 в 23:05)
| | Если Вы приведете структуры таблиц, можно будет и поподробнее. | |
|
|
|
|
|
|
|
для: Trianon
(23.12.2006 в 09:33)
| | Структура таблицы online в первом посте, а user:
id | login | name | pass | email | icq | |
|
|
|
|
|
|
|
для: Dez
(23.12.2006 в 12:56)
| |
<?
$sql = "SELECT users. * , online.id as status
FROM users LEFT JOIN online ON users.id = online.id";
$res = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($res))
{
$row['fid']=is_null($row['fid']) ? 'offline' : 'online';
print_r($row); echo "<br>\r\n"; // это можно заменить на <tr><td>....
}
|
| |
|
|
|