Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: выборка записей из БД без повтора
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » выборка записей из БД без повтора

Страниц (1): [1]
 

1. fiksik - 20 Апреля, 2016 - 07:00:41 - перейти к сообщению
здравствуйте, уважаемые форумчане! Стараюсь я освоить PHP потихоньку и вот над одной задачкой бьюсь уже неприлично долго, возможно у меня подход просто неверный, вот и прошу помощи.
Итак, есть у меня 2 таблицы: 'users' и 'table'.
В таблице table такие столбцы:
'id' - id сообщения
' author' - автор сообщения
'recipient' -получатель сообщения

В таблице 'users' такие столбцы:
'id'
'login'
вопрос в том, что я не могу вывести список всех пользователей, с кем веду переписку без повтора. Т.е я вывожу login человека , кто мне писал например, но он повторяется столько раз, сколько раз писал.

<?php

$result = $db->query("SELECT * FROM `table` WHERE `author` = '$_SESSION[id]' or `recipient` = '$_SESSION[id]'");
$array = $result->fetch(PDO::FETCH_ASSOC);

do{
if($array['author']==$_SESSION['id']){
$result2 = $db->query("SELECT * FROM users WHERE id = '$array[recipient]'");
$array2 = $result2->fetch(PDO::FETCH_ASSOC);
}
if($array['recipient']==$_SESSION['id']){
$result2 = $db->query("SELECT * FROM users WHERE id = '$array[author]'");
$array2 = $result2->fetch(PDO::FETCH_ASSOC);
}
echo $array2['login'] .$array['message']."\n<br>";
}
While($array = $result->fetch(PDO::FETCH_ASSOC));


?>
я пробовал разные варианты, но получалось по результату так же.
2. 3d_killer - 20 Апреля, 2016 - 09:56:34 - перейти к сообщению
3. fiksik - 20 Апреля, 2016 - 13:12:36 - перейти к сообщению
я пробовал так:
$result = $db->query("SELECT DISTINCT * FROM `table` WHERE `author` = '$_SESSION[id]' or `recipient` = '$_SESSION[id]'");
$array = $result->fetch(PDO::FETCH_ASSOC);
ничего не поменялось
4. Viper - 20 Апреля, 2016 - 13:47:40 - перейти к сообщению
5. fiksik - 20 Апреля, 2016 - 16:08:09 - перейти к сообщению
я не пойму что я делал не так, но пробовал я и GROUP BY
$result = $db->query("SELECT * FROM `table` WHERE `author` = '$_SESSION[id]' or `recipient` = '$_SESSION[id]' GROUP BY author");
$array = $result->fetch(PDO::FETCH_ASSOC);
6. 3d_killer - 20 Апреля, 2016 - 16:11:15 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT(author),* FROM

(Добавление)
[quote=Viper][/quote] Думаю группировка в данной ситуации будет помедленнее
(Добавление)
PHP:
скопировать код в буфер обмена
  1. "SELECT DISTINCT(author),* FROM `table` WHERE `author` = '$_SESSION[id]' or `recipient` = '$_SESSION[id]'"
7. fiksik - 21 Апреля, 2016 - 06:16:47 - перейти к сообщению
SELECT DISTINCT(author),* FROM
Получилось! Большое спасибо за помощь!

 

Powered by ExBB FM 1.0 RC1