Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Получить список сообщений по заданным параметрам  (Прочитано 27582 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Shouldercannon
Помогающий

ru
Offline Offline

« : 04-12-2014 10:59 » 

Доброго времени суток!
Есть две таблицы
DROP TABLE IF EXISTS `users`;

CREATE TABLE IF NOT EXISTS `users` (
  `
uidint(10unsigned NOT NULL auto_increment,
  `
ip_addressvarchar(15NOT NULL,
  `
statustinyint(1unsigned zerofill NOT NULL default '0',
  `
nickvarchar(60NOT NULL,
  `
surnamevarchar(20NOT NULL,
  `
namevarchar(20NOT NULL,
  `
patronymicvarchar(20NOT NULL,
  `
cabinetsmallint(3) default NULL,
  `
pc_namevarchar(20NOT NULL,
  `
client_versionvarchar(10NOT NULL,
  `
admin_statustinyint(1unsigned zerofill NOT NULL default '0',
  `
admin_flagsvarchar(3NOT NULL,
  `
connection_timedatetime default NULL,
  `
aboutvarchar(2000NOT NULL,
  
PRIMARY KEY  (`uid`)
ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

INSERT INTO `users` (`uid`, `ip_address`, `status`, `nick`, `surname`, `name`, `patronymic`, `cabinet`, `pc_name`, `client_version`, `admin_status`, `admin_flags`, `connection_time`, `about`) VALUES
(NULL'192.168.0.2'1'Shouldercannon'''''''305'ROMAN''1.0.0.0'1'z''2013-03-20 00:00:00'''),
(
NULL'192.168.0.3'1'Kira'''''''303'KIRA''1.0.0.0.0'1'ab''2013-03-20 10:14:46'''),
(
NULL'192.168.0.4'1'Гость''''''',  302'302-4''1.0.0.1'0'''2013-03-20 00:00:55'''),
(
NULL'192.168.0.5'0'Тестер''''''',  502'502-1''1.0.1.1'0'''2013-03-20 00:10:55''');
DROP TABLE IF EXISTS `private_messages`;

CREATE TABLE IF NOT EXISTS `private_messages` (
  `
uidint(10unsigned NOT NULL auto_increment,
  `
fromint(2unsigned NOT NULL,
  `
toint(2unsigned NOT NULL,
  `
datedatetime default NULL,
  `
messagevarchar(2000NOT NULL,
  
PRIMARY KEY  (`uid`)
ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

INSERT INTO `private_messages` (`uid`, `from`, `to`, `date`, `message`) VALUES
(NULL11'2013-03-20 10:00:00''Привет'),
(
NULL31'2013-03-20 10:01:27''Добрый'),
(
NULL21'2013-03-20 10:02:46''Как дела'),
(
NULL41'2013-03-20 10:04:12''Нормально');
Так я получаю всё содержимое private_messages, где вместо from и to подставляются из users ники пользователей
<?php
include "dbconnect.php";
// Проверка на пустоту
if (empty($_GET['usrid']) {
	
die;
}
$query "SELECT `tpm`.`uid`, `tusr_from`.`nick` AS `from`, `tusr_to`.`nick` AS `to`, `tpm`.`date`, `tpm`.`message`
       
	
 FROM `private_messages` AS `tpm`
         JOIN `users` AS `tusr_from` ON `tusr_from`.`uid` = `tpm`.`from`
         JOIN `users` AS `tusr_to` ON `tusr_to`.`uid` = `tpm`.`to`
	
	
 WHERE `tpm`.`uid` >= '"
.intval(mysql_real_escape_string($_GET['pmid']))."'
	
	
 ORDER BY `tpm`.`uid`"
;
$result mysql_query($query) or die ("ERROR: ".mysql_error());
while (
$row mysql_fetch_array($result)) // Берём результаты из каждой строки
echo $row['uid'].'~'.$row['from'].'~'.$row['to'].'~'.$row['date'].'~'.$row['message'].'!end-post'// Выводим данные
?>
Помогите, пожалуйста, сделать, чтобы выводились сообщения от указанных from и to
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 04-12-2014 12:51 » 

насколько я понял, путь должен быть примерно такой

Код:
xxx
...
join
-- извлечение записей from...to
  select * from `users` where `uid` in
  (
    SELECT `uid`  from `users` where  `uid` between(`from`,`to`)
   )
  on xxx.`uid`=`users`.`uid`

;
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 04-12-2014 13:28 » 

SELECT *
FROM `private_messages` AS `tpm`
WHERE from = 'uid_from'
AND to ='uid_to'

Если нужны имена

SELECT *, (SELECT distinct name FROM users u WHERE u.uid = tpm.from) as from_name, SELECT distinct name FROM users u2 WHERE u2.uid = tpm.to) as to_name
FROM `private_messages` AS `tpm`
WHERE from = 'uid_from'
AND to ='uid_to'

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Shouldercannon
Помогающий

ru
Offline Offline

« Ответ #3 : 04-12-2014 13:55 » 

Забыл в посте дописать в PHP
Код: (PHP)
if (empty($_GET['usrid']) || empty($_GET['from']) || empty($_GET['pmid'])) {
        die;
}
То есть функционал скрипта должен остаться тем же, но быть немного шире. Выводить сообщения для указанных ID usrid иID from
« Последнее редактирование: 04-12-2014 14:01 от Shouldercannon » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines