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

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

ru
Offline Offline

« : 04-12-2014 10:59 » 

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

CREATE TABLE IF NOT EXISTS `users` (
  `
uid` int(10) unsigned NOT NULL auto_increment,
  `
ip_address` varchar(15) NOT NULL,
  `
status` tinyint(1) unsigned zerofill NOT NULL default '0',
  `
nick` varchar(60) NOT NULL,
  `
surname` varchar(20) NOT NULL,
  `
name` varchar(20) NOT NULL,
  `
patronymic` varchar(20) NOT NULL,
  `
cabinet` smallint(3) default NULL,
  `
pc_name` varchar(20) NOT NULL,
  `
client_version` varchar(10) NOT NULL,
  `
admin_status` tinyint(1) unsigned zerofill NOT NULL default '0',
  `
admin_flags` varchar(3) NOT NULL,
  `
connection_time` datetime default NULL,
  `
about` varchar(2000) NOT 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` (
  `
uid` int(10) unsigned NOT NULL auto_increment,
  `
from` int(2) unsigned NOT NULL,
  `
to` int(2) unsigned NOT NULL,
  `
date` datetime default NULL,
  `
message` varchar(2000) NOT NULL,
  
PRIMARY KEY  (`uid`)
) 
ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

INSERT INTO `private_messages` (`uid`, `from`, `to`, `date`, `message`) VALUES
(NULL, 1, 1, '2013-03-20 10:00:00', 'Привет'),
(
NULL, 3, 1, '2013-03-20 10:01:27', 'Добрый'),
(
NULL, 2, 1, '2013-03-20 10:02:46', 'Как дела'),
(
NULL, 4, 1, '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 » new

Забыл в посте дописать в 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