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

Форум MySQL

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

 

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

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

тема: Можно ли упростить запрос?

Сообщения:  [1-10]   [11-18] 

 
 автор: kis-kis   (10.01.2007 в 19:30)   письмо автору
 
   для: Trianon   (09.01.2007 в 23:34)
 

Спасибо. Очень благодарен за оказанную помощь...

   
 
 автор: Trianon   (09.01.2007 в 23:34)   письмо автору
 
   для: kis-kis   (09.01.2007 в 21:54)
 

Вероятно, можно вообще обойтись одним SELECTом:

SELECT l.user_id as fromid, l.for_user as toid, 
  f.uname as fromname, 
  t.uname as toname,
  l.subject,  t.email as toemail 
FROM letters as l JOIN passport as f ON l.user_id = f.id
JOIN passport as t ON l.for_user = t.id
WHERE l.readmess='0' AND l.rep_send = '0' AND t.rep_mess='1'

тогда если и будет нагружать, то уж точно не запрос, а сама отправка писем.

   
 
 автор: kis-kis   (09.01.2007 в 21:54)   письмо автору
 
   для: Trianon   (09.01.2007 в 21:46)
 

Trianon - Вы гений!

Вы не перестаете меня удивлять...
Можно вопрос?

Откуда такие познания? ;-)

И еще - если пользователей будет около 1000 - это не сильно будет нагружать хостера?

   
 
 автор: Trianon   (09.01.2007 в 21:46)   письмо автору
 
   для: kis-kis   (09.01.2007 в 21:41)
 


    $usr = $row['for_user']; 
    $rowcat = isset($cache[$usr]) ? $cache[$usr] : 
        ($cache[$usr]=mysql_fetch_assoc(mysql_query( 
          "SELECT * FROM passport WHERE id = $usr"))); 
    if($rowcat['rep_mess'] != '1')
        continue;
    $usr = $row['userid']; 
    $rowcat2 = isset($cache[$usr]) ? $cache[$usr] : 
        ($cache[$usr]=mysql_fetch_assoc(mysql_query( 
          "SELECT * FROM passport WHERE id = $usr"))); 

   
 
 автор: kis-kis   (09.01.2007 в 21:41)   письмо автору
 
   для: Trianon   (09.01.2007 в 21:36)
 

База:


CREATE TABLE `passport` (
  `id` int(11) NOT NULL auto_increment,
  `uname` text NOT NULL,
  `email` text NOT NULL,
  `pass` varchar(50) NOT NULL default '',
  `level` tinyint(4) NOT NULL default '3',
  `avatar` varchar(100) NOT NULL default '',
  `subs` int(1) NOT NULL default '1',
  `rep_mess` int(1) NOT NULL default '1',
  `rep_job` int(1) NOT NULL default '1',
  `rep_bazar` int(1) NOT NULL default '1',
  `last_login` text NOT NULL,
  `last_ip` text NOT NULL,
  `bill_job` int(1) default '0',
  `billexpdate` date NOT NULL default '0000-00-00',
  `billcontname` text NOT NULL,
  `billtel` text NOT NULL,
  `vkey` varchar(30) NOT NULL default '',
  `status` tinyint(1) default '0',
  `regdate` date NOT NULL default '0000-00-00',
  KEY `id` (`id`),
  KEY `bill_job` (`bill_job`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=26;

INSERT INTO `passport` VALUES (1, 'maXim', 'max@max.max', 'c8837b23ff8aaa8a2dde915473ce0991', 3, 'av-1.jpg', 0, 0, 1, 1, '09.01.2007 21:15:23', '127.0.0.1', 1, '2007-12-31', '', '', '', 1, '0000-00-00');


Чтобы отчеты отправлялись только тем, у кого в ячейке rep_mess стоит 1. Теперь понятно?

   
 
 автор: Trianon   (09.01.2007 в 21:36)   письмо автору
 
   для: kis-kis   (09.01.2007 в 21:20)
 

А этого утверждения я не понял.

   
 
 автор: kis-kis   (09.01.2007 в 21:20)   письмо автору
 
   для: Trianon   (09.01.2007 в 19:10)
 

Спасибо.
А это?
>> И как можно сделать чтобы он выполнялся только для тех пользователей у которых rep_mess='1'?

   
 
 автор: Trianon   (09.01.2007 в 19:10)   письмо автору
 
   для: kis-kis   (09.01.2007 в 18:19)
 

<?
$cache
= array();
// Отправляем пользователям отчеты о новых внутренних сообщениях 
$query "SELECT * FROM letters WHERE readmess = '0' and rep_send = '0'"
$result=mysql_query($query) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error().""); 
if (
mysql_num_rows($result)!=0)
{
  while(
$row mysql_fetch_array($result))
  {
    
$usr $row['for_user'];
    
$rowcat = isset($cache[$usr]) ? $cache[$usr] :
        (
$cache[$usr]=mysql_fetch_assoc(mysql_query(
          
"SELECT * FROM passport WHERE id = $usr")));
    
$usr $row['userid'];
    
$rowcat2 = isset($cache[$usr]) ? $cache[$usr] :
        (
$cache[$usr]=mysql_fetch_assoc(mysql_query(
          
"SELECT * FROM passport WHERE id = $usr")));

    
$send_data date("Y.m.d H:i:s");

  
// etc...

   
 
 автор: kis-kis   (09.01.2007 в 18:19)   письмо автору
 
   для: kis-kis   (08.01.2007 в 17:32)
 

Trianon, Вы не поможете?

   
 
 автор: kis-kis   (08.01.2007 в 17:32)   письмо автору
 
   для: Trianon   (08.01.2007 в 16:54)
 

Можно полученный код?
>> И как можно сделать чтобы он выполнялся только для тех пользователей у которых rep_mess='1'?
А с условием не поможете?

   

Сообщения:  [1-10]   [11-18] 

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

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