Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как объединить запрос, чтобы...? (MySQL)

Сообщения:  [1-6] 

 
 автор: not detected   (24.01.2008 в 09:40)   письмо автору
 
   для: semirax   (23.01.2008 в 20:21)
 

>а как насчет
>
>SELECT post.id, post.msg, coalesce((NOW() - online.lasthit),' время не указано ') AS lasthitint FROM post LEFT JOIN online ON (post.id=online.id)

Прошу прощения, вроде работает:) . В браузере видать у меня был глюк (страница бралась из кеша).

   
 
 автор: not detected   (24.01.2008 в 06:50)   письмо автору
 
   для: not detected   (24.01.2008 в 05:52)
 

Может я не правильно выбрал структуру таблиц? Или ещё чего?
И вообще как делают подобные вещи, подскажите пожалуйста.
З.Ы.Просто из таблицы online удаляются id, время авторизации которых истекло, поэтом получается такая байда :( . Есть вариант не удалять эти строки, тогда думаю будет все нормально. Просто не охото держать лишнюю инфу в этой таблице.

   
 
 автор: not detected   (24.01.2008 в 05:52)   письмо автору
 
   для: semirax   (23.01.2008 в 20:21)
 

Неа, не работает так, как мне надо :( . Здесь опять, либо выпадают посты (если нет id в online) из результата выборки, либо в lasthitint значение другои строки.

   
 
 автор: semirax   (23.01.2008 в 20:21)   письмо автору
 
   для: not detected   (23.01.2008 в 18:16)
 

а как насчет

SELECT post.id, post.msg, coalesce((NOW() - online.lasthit),' время не указано ') AS lasthitint FROM post LEFT JOIN online ON (post.id=online.id)

   
 
 автор: not detected   (23.01.2008 в 18:16)   письмо автору
 
   для: not detected   (23.01.2008 в 14:04)
 

Пробовал сделать так

$q="SELECT post.id, post.msg, (NOW() - online.lasthit) AS lasthitint FROM post, online WHERE post.id=online.id";
, но в этом случае если в таблице online нет строки с id юзера, то пост не попадает в результат выборки :( .
Добавив в условие 1=1 :

$q="SELECT post.id, post.msg, (NOW() - online.lasthit) AS lasthitint FROM post, online WHERE post.id=online.id OR '1'='1'";
. И тут получаю что если в online нет строки с id юзера, то в алиасе lasthitint будет значение предыдущей строки (вроде так) , а мне надо чтоб если в online нет строки с id из post, то в lasthitint должно быть значение 900 например.

   
 
 автор: not detected   (23.01.2008 в 14:04)   письмо автору
 
 

Здрастсвуйте:) .
Хочу сделать на сайте (в форуме, чате и пр.) чтоб в сообщениях возле ника выводилась инфа типа on/off (Online или Offline пользователь в данный момент).
вот есть две таблицы, одна с постами post (столбцы: id - id автора поста, msg - сам пост ), а другая таблица online (столбцы: id - id пользователя (он же id автора поста в таблице post), lasthit - время последнего хита).
<?php
...
$q="SELECT id, msg FROM post  LIMIT $start,$total"
$sqlres=mysql_query($q); 
...
for(){ 
//здесь цикл, в котором выводим результат $sqlres
... list($id,$msg)=mysql_fetch_row($sqlres); 
... 
$sqlres2 mysql_query("SELECT id FROM online WHERE id='$id' and NOW() - lasthit < 300"); 
if(
mysql_num_rows($sqlres2) == 1) echo'On'; else echo'Off'
... 

}
//конец цикла
...
?>
. Можно ли это сделать както по другому? Чтоб небыло запросов к БД внутри цикла.

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования