|
|
|
| Можно ли упростить данный запрос?
// Отправляем пользователям отчеты о новых внутренних сообщениях
$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)) {
$resultc=mysql_query("SELECT * FROM passport WHERE id = '$row[for_user]'") or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
$rowcat = mysql_fetch_array($resultc);
$resultc2=mysql_query("SELECT * FROM passport WHERE id = '$row[userid]'") or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
$rowcat2 = mysql_fetch_array($resultc2);
$send_data = date("Y.m.d H:i:s");
$temp = "
\n\nУ Вас новое внутреннее сообщение на сайте $mm_sitetitle (<a href=$mm_site_url>$mm_site_url</a>) от пользователя $rowcat2[uname], с темой: ''$row[subject]''
\n\n<br><br>Ознакомиться с ним можно в Вашем личном кабинете, в который можно пройти по ссылке ниже\n\n<br><br>
\n\n<a href=$mm_site_url/users/>$mm_site_url/users/</a>\n\n<br>
\n\n<br>Отправлено:</b> $send_data\n\n<br><br>
===================================<br>
Отвечать на данное письмо не нужно<br>
===================================<br>
<br>\n\n- - - - - -
\n\n<br>С уважением,
\n\n<br>$mm_sitetitle
\n\n<br><a href=$mm_site_url>$mm_site_url</a><br>";
$subj = "У Вас новое внутреннее сообщение на сайте $mm_sitetitle";
$body = $temp;
$adds .= "From: ROBOT <$mm_robot_email>\n"; //Мыло робота
$adds .= "X-Sender: <$mm_robot_email>\n";
$adds .= "Return-Path: <$mm_robot_email>\n";
$adds .= "X-Priority: 2 (High)\n";
$adds .= "Content-Type: text/html; charset=windows-1251\n";
$mymail="$rowcat[uname] <$rowcat[email]>"; // email адрес пользователя
mail($mymail,$subj,$body,$adds);
$query = "UPDATE letters SET rep_send = '1' WHERE readmess = '0' and rep_send = '0'";
$req = mysql_query($query) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
}
}
|
| |
|
|
|
|
|
|
|
для: kis-kis
(08.01.2007 в 08:33)
| | Никто не поможет? | |
|
|
|
|
|
|
|
для: kis-kis
(08.01.2007 в 08:33)
| | Какой запрос? И для чего его урощать? | |
|
|
|
|
|
|
|
для: kasmanaft
(08.01.2007 в 10:23)
| | Вы считаете он грамотно написан? | |
|
|
|
|
|
|
|
для: kis-kis
(08.01.2007 в 10:44)
| | Честно говоря я не понял что нужно упрощать ... если имеется ввиду запрос в БД, так в этом скрипте 4 запроса! | |
|
|
|
|
|
|
|
для: kasmanaft
(08.01.2007 в 12:32)
| | Извините, я имею ввиду данный скрипт...
И как можно сделать чтобы он выполнялся только для тех пользователей у которых rep_mess='1'?
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(08.01.2007 в 12:38)
| | Ну если работает, я бы, наверное, так и оставил ... Грубых недочетов я не вижу ...
-- только для тех пользователей у которых rep_mess='1'
на php можно просто добавить проверку перед отсылкой сообщения (или еще раньше), а как это сделать средствами mysql не скажу ... я не мастер всяких закрученных запросов :) | |
|
|
|
|
|
|
|
для: kis-kis
(08.01.2007 в 08:33)
| | В принципе, можно убрать повторы второго и третьего SQL-запросов. | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2007 в 16:54)
| | Можно полученный код?
>> И как можно сделать чтобы он выполнялся только для тех пользователей у которых rep_mess='1'?
А с условием не поможете? | |
|
|
|
|
|
|
|
для: kis-kis
(08.01.2007 в 17:32)
| | Trianon, Вы не поможете? | |
|
|
|
|
|
|
|
для: 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...
|
| |
|
|
|
|
|
|
|
для: Trianon
(09.01.2007 в 19:10)
| | Спасибо.
А это?
>> И как можно сделать чтобы он выполнялся только для тех пользователей у которых rep_mess='1'? | |
|
|
|
|
|
|
|
для: kis-kis
(09.01.2007 в 21:20)
| | А этого утверждения я не понял. | |
|
|
|
|
|
|
|
для: 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. Теперь понятно? | |
|
|
|
|
|
|
|
для: 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")));
|
| |
|
|
|
|
|
|
|
для: Trianon
(09.01.2007 в 21:46)
| | Trianon - Вы гений!
Вы не перестаете меня удивлять...
Можно вопрос?
Откуда такие познания? ;-)
И еще - если пользователей будет около 1000 - это не сильно будет нагружать хостера? | |
|
|
|
|
|
|
|
для: 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'
|
тогда если и будет нагружать, то уж точно не запрос, а сама отправка писем. | |
|
|
|
|
|
|
|
для: Trianon
(09.01.2007 в 23:34)
| | Спасибо. Очень благодарен за оказанную помощь... | |
|
|
|