Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
[+]
Добрый день участникам портала. Столкнулся с проблемой, как решить не знаю( Нужно вывысти таблицу данных из бд, но вот в чем проблема:
Данные беру вот таким запросом:
$result=$main->db->sql_query("SELECT p.*, u.uid, u.user_name FROM ".TEAMS." as p JOIN ".USERS." as u ON (p.id_cl=u.uid)");
С ним все гуд, но проблема заключается в том, что в последнем столбце надо вывести число людей, которые онлайн в данный момент.
Если смотреть по отдельности, а не списком, то я это делаю вот таким запросом:
$result=$main->db->sql_query("SELECT p.*, u.* FROM `".PLAYERS."` as p LEFT JOIN `".USERS."` as u ON (p.uid=u.uid) WHERE (`status_time`>NOW() - INTERVAL 5 MINUTE) AND `tid`={$_GET['id']}");
Так вот теперь вроде как сам вопрос, как объединить эти два запроса, что бы выводились все записи и количество онлайн каждой???
biperch
Отправлено: 10 Июня, 2013 - 02:10:58
Частый посетитель
Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009 Откуда: Днепропетровск
LEFTJOIN(SELECT p.*, u.*FROM`".PLAYERS."`AS p LEFTJOIN`".USERS."`AS u ON(p.uid=u.uid)WHERE(`status_time`>NOW()- INTERVAL 5 MINUTE)AND`tid`=12) pl N pl.tid = p.tid
примерно так, но это просто пример, только я полей не знаю и какой признак того что клиент онлан
ridvik
Отправлено: 10 Июня, 2013 - 07:56:19
Частый гость
Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011
LEFTJOIN(SELECT p.*, u.*FROM`".PLAYERS."`AS p LEFTJOIN`".USERS."`AS u ON(p.uid=u.uid)WHERE(`status_time`>NOW()- INTERVAL 5 MINUTE)AND`tid`=12) pl N pl.tid = p.tid
примерно так, но это просто пример, только я полей не знаю и какой признак того что клиент онлан
спасибо, днем попробую, а признак то что он онлайн это вот status_time`>NOW() - INTERVAL 5 MINUTE
ridvik
Отправлено: 14 Июня, 2013 - 13:41:39
Частый гость
Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011
выходит вот такая ошибка: Duplicate column name 'uid':
EuGen
Отправлено: 14 Июня, 2013 - 13:50:52
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
ridvik
Потому что не указано, из какой таблицы брать поле. При выборке всех полей (через знак *) в подзапросе неясно, какую из них возвращать во внешний запрос, поскольку указанное в ошибке поле присутствует более чем в 1-й таблице. Укажите явно.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
ridvik
Отправлено: 14 Июня, 2013 - 15:35:33
Частый гость
Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
[+]
EuGen пишет:
ridvik
Потому что не указано, из какой таблицы брать поле. При выборке всех полей (через знак *) в подзапросе неясно, какую из них возвращать во внешний запрос, поскольку указанное в ошибке поле присутствует более чем в 1-й таблице. Укажите явно.
не совсем вас понял(( не могли бы сами подставить и потом мне указать?
// объект запроса подготовлен: указан адрес и создана функция onreadystatechange
// для обработки ответа сервера
req.send(null);// отослать запрос
}
</script>";
}
Вот собственно весь код, в последнем столбике хотелось бы выводить колличество онлайн, т.е. по условию WHERE (`status_time`>NOW() - INTERVAL 5 MINUTE)
EuGen
Отправлено: 14 Июня, 2013 - 16:39:11
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
ridvik пишет:
LEFT JOIN (SELECT p.*, u.* FROM `".PLAYERS."` AS p
LEFT JOIN `".USERS."` AS u ON (p.uid=u.uid)
Вот Ваш подзапрос. в таблицах с альясами p и u присутствует одинаковое поле по названию (а именно uid) потому СУБД не может определить, из какой таблицы возвращать это поле в основной запрос. Подставить я ничего не могу, так как я, как и СУБД, не могу догадываться, из какой таблицы Вам это поле нужно. На первый взгляд подойдёт из любой.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
ridvik
Отправлено: 14 Июня, 2013 - 17:48:09
Частый гость
Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
[+]
EuGen пишет:
ridvik пишет:
LEFT JOIN (SELECT p.*, u.* FROM `".PLAYERS."` AS p
LEFT JOIN `".USERS."` AS u ON (p.uid=u.uid)
Вот Ваш подзапрос. в таблицах с альясами p и u присутствует одинаковое поле по названию (а именно uid) потому СУБД не может определить, из какой таблицы возвращать это поле в основной запрос. Подставить я ничего не могу, так как я, как и СУБД, не могу догадываться, из какой таблицы Вам это поле нужно. На первый взгляд подойдёт из любой.
так, ну это я понял. а как же мне тогда выводить то значение?)) извините меня, но что-то реально туплю(((
EuGen
Отправлено: 14 Июня, 2013 - 17:49:37
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Перечислением полей вместо указания * при выборке, очевидно. При этом в списке указать поле uid только из одной таблицы, той, из которой нужно по логике Вашего запроса.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
ridvik
Отправлено: 14 Июня, 2013 - 18:02:09
Частый гость
Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
[+]
EuGen пишет:
Перечислением полей вместо указания * при выборке, очевидно. При этом в списке указать поле uid только из одной таблицы, той, из которой нужно по логике Вашего запроса.
так он у меня в обоих таблицах, я так поле назвал, что бы не путаться))) что же теперь делать?))) правда, туплю и не пойму что и как)))
EuGen
Отправлено: 14 Июня, 2013 - 18:16:11
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Вот и укажите в подзапросе из какой таблицы выбираете, то есть p.uid или u.uid
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
ridvik
Отправлено: 14 Июня, 2013 - 18:51:47
Частый гость
Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
[+]
EuGen пишет:
Вот и укажите в подзапросе из какой таблицы выбираете, то есть p.uid или u.uid
как?))))
EuGen
Отправлено: 14 Июня, 2013 - 19:03:46
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
SELECT p.field0, p.field1, u.field3, u.field4.*FROM`".PLAYERS."`AS p
LEFTJOIN`".USERS."`AS u ON(p.uid=u.uid)
- синтаксис таков. При этом среди field0, field1, .. не должно встречаться полей с одинаковыми названиями, то есть поле можно выбрать только из одной таблицы - либо же, если необходимо из обеих, требуется определить разные альясы.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.