Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2014, 17:32   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Получить список сообщений по заданным параметрам

Доброго времени суток!
Есть две таблицы
PHP код:
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'''); 
PHP код:
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 код:
<?php
include "dbconnect.php";
// Проверка на пустоту
if (empty($_GET['usrid']) || empty($_GET['from']) || empty($_GET['pmid'])) {
    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

Последний раз редактировалось Shouldercannon; 04.12.2014 в 14:01.
Shouldercannon вне форума Ответить с цитированием
Старый 06.12.2014, 00:05   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Ничего не понял, ну получили уже, ну и выводите..

Код не разбирал, пишете же что всё получаете...

Или что то не получается?
vovk вне форума Ответить с цитированием
Старый 06.12.2014, 10:27   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

С данным PHP я получаю весь список сообщений:
Zenith -> Zenith -> 2013-03-20 10:00:00 -> Привет Zenith!
Cali -> Zenith -> 2013-03-20 10:00:01 -> Привет Zenith!
Illana -> Zenith -> 2013-03-20 10:00:01 -> Привет Zenith!
Karag -> Zenith -> 2013-03-20 10:00:01 -> Привет Zenith!
Zenith -> Zenith -> 2013-03-20 10:00:04 -> Добрый Zenith!
Zenith -> Cali -> 2013-03-20 10:00:05 -> Добрый Cali!
Zenith -> Illana -> 2013-03-20 10:00:05 -> Добрый Illana!
Zenith -> Karag -> 2013-03-20 10:00:05 -> Добрый Karag!

А нужно получить список сообщений только для указанных
PHP код:
$_GET['usrid']
$_GET['from'
Например: usrid = 1 (Zenith), from = 2 (Cali)
Cali -> Zenith -> 2013-03-20 10:00:01 -> Привет Zenith!

По идее тут
PHP код:
$query "SELECT `tpm`.`uid`, `tusr_from`.`nick` AS `from`, `tusr_to`.`nick` AS `to`, `tpm`.`date`, `tpm`.`message` 
вместо tusr_from -> $_GET['from'] и tusr_to -> $_GET['usrid']
Shouldercannon вне форума Ответить с цитированием
Старый 06.12.2014, 12:57   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

то есть надо получить конкретные записи? ну вроде достаточно в запросе добавить в условия where
tusr_from.nick = ник от кого and tusr_to.nick = ник кому
Я не великий знаток SQL давно кроме простых запросов ничем не пользовался.
vovk вне форума Ответить с цитированием
Старый 06.12.2014, 19:22   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

PHP код:
<?php
include "dbconnect.php";
// Проверка на пустоту
if (empty($_GET['usrid']) || empty($_GET['from']) || empty($_GET['pmid'])) {
    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`.`to` = '"
.mysql_real_escape_string($_GET['usrid'])."' AND `tpm`.`from` = '".mysql_real_escape_string($_GET['from'])."' AND `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'// Выводим данные
?>

Последний раз редактировалось Shouldercannon; 06.12.2014 в 22:11.
Shouldercannon вне форума Ответить с цитированием
Старый 07.12.2014, 15:35   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Не тут то было. Проблема решена на половину.

Возьмём спиcок:
Shouldercannon -> Гость -> 2013-03-20 10:00:06 -> Добрый Гость!
Гость -> Shouldercannon -> 2013-03-20 10:00:02 -> Привет Shouldercannon!

Где: Shouldercannon имеет uid 1, Гость uid 2.
При данном раскладе я делаю запрос с uid 1 и 2, и получаю
Shouldercannon -> Гость -> 2013-03-20 10:00:06 -> Добрый Гость!

Как сделать, чтобы вывелись все сообщения с uid 1 и 2
Должно быть так:
Shouldercannon -> Гость -> 2013-03-20 10:00:06 -> Добрый Гость!
Гость -> Shouldercannon -> 2013-03-20 10:00:02 -> Привет Shouldercannon!
Shouldercannon вне форума Ответить с цитированием
Старый 07.12.2014, 16:19   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Взаимная переписка между двумя пользователями (uid 1 и 3):
Код:
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`.`from` = '1' AND `tpm`.`to` = '3') OR (`tpm`.`from` = '3' AND `tpm`.`to` = '1') 
ORDER BY `tpm`.`uid`;
Andkorol вне форума Ответить с цитированием
Старый 07.12.2014, 16:52   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Благодарю.
Shouldercannon вне форума Ответить с цитированием
Старый 11.12.2014, 19:25   #9
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Взаимная переписка между двумя пользователями (uid 1 и 3):
Код:
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`.`from` = '1' AND `tpm`.`to` = '3') OR (`tpm`.`from` = '3' AND `tpm`.`to` = '1') 
ORDER BY `tpm`.`uid`;
Код:
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`.`from` = '1' AND `tpm`.`to` = '3') OR (`tpm`.`from` = '3' AND `tpm`.`to` = '1') AND `tpm`.`uid` >= '8' 
ORDER BY `tpm`.`uid`;
Всё равно выдаёт весь список сообщений, хотя указываю, что нужно получить сообщения начиная с uid 8. В чём недочёт?
Shouldercannon вне форума Ответить с цитированием
Старый 11.12.2014, 21:06   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Всё равно выдаёт весь список сообщений, хотя указываю, что нужно получить сообщения начиная с uid 8. В чём недочёт?
Не совсем понимаю, как этот запрос может получать именно «весь список сообщений» – если должен выдавать только переписку между пользователями 1 <–> 3.
Возможно поможет группировка условий при помощи дополнительных скобок:
Код:
WHERE ((`tpm`.`from` = '1' AND `tpm`.`to` = '3') OR (`tpm`.`from` = '3' AND `tpm`.`to` = '1')) AND `tpm`.`uid` >= '8'
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
распределение данных по заданным параметрам avakcb Фриланс 6 18.08.2014 18:02
Добовление строки по заданным параметрам grichanuk Microsoft Office Excel 2 07.04.2010 23:34
Построение матрицы в VBA по заданным параметрам. krmn Помощь студентам 5 24.12.2009 19:26
Открытие сторонних приложений по заданным параметрам skalt12 Общие вопросы Delphi 6 16.08.2009 19:23
Автоматический поиск ячейки по заданным параметрам Renzo Microsoft Office Excel 5 07.03.2009 17:48