SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#51 29.04.2010 06:05:46

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: проблемма с select

А давайте действительно поступим так, как предлагает Вася — Вы напишете
структуру таблиц, тестовые данные, и результат запроса, который Вы хотите
получить. Читать код PHP, разумеется, никто не будет, так же, как и регистри-
роваться на мамбе и общаться там, чтобы в конечном итоге все равно не по-
нять, чего же Вы хотите.

Неактивен

 

#52 29.04.2010 12:35:45

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

ОК, давайте попробуем.
есть двет таблицы users_m (информация о пользователях) и messages_m(сообщения)

структура таблицы users_m
id (65)    login (vika@yandex.ru)        first_name (vika)
id (63)    login (tufanov@yandex.ru)  first_name (sergey)
id (64)    login (lena@yandex.ru)        first_name (lena)
id (67)    login (anton@yandex.ru)        first_name (anton)


структура таблицы messages_m учем что мы авторозованы на пользователи (tufanov@yandex.ru) и GET у нашей страницы с сообщениями 63
id (1) id_pol (63) id_otp (67) del_otp (0) del_pol (0) view (0) message (текст 1)
id (2) id_pol (63) id_otp (65) del_otp (0) del_pol (0) view (0) message (текст 2)
id (3) id_pol (65) id_otp (63) del_otp (0) del_pol (0) view (0) message (текст 3)
id (4) id_pol (64) id_otp (63) del_otp (0) del_pol (0) view (0) message (текст 4)
id (5) id_pol (65) id_otp (63) del_pol (0) del_pol (0) view (0) message (текст 5)
id (6) id_pol (67) id_otp (63) del_otp (0) del_pol (0) view (0) message (текст 6)
id_pol - это id получателя сообщения, id_otp - отправителя
del_pol и del_pol я делал для того, что бы если кото отослал сообщенеи и его удалил, то у того кто получил оно осталось, и наоборот. соответственно туда заносяться 1
view - это отметка о просмотре, но на ней я думаю не нужно акцентировать внимание

нужен такой запрос что бы на одной странице выводились пользователи из таблицы users_m, которым отправили сообщения и от которых получили, но они должны не повторяться, если я отправил 65 и от него же получил, он групируеться.
если я получил например от юзера сообение с id 300, на странице выводяться его данные, и отправил id 200, то тже на странице выводяться его данные в дальнейшем вся переписка между ними групируеться, и выводиться только по одному уникальному пользователю

само чтение и переписка ведется в диалоговом окне, там линк такой messages_send.php?id=63&users=65 , где 63 это мой, а 65 того пользователя с которым переписываюсь
запрос на просмотр переписки работает нормально его трогать не нужно, но на всякий случай напишуsmile
$result5 = mysql_query("SELECT u.*, m.* FROM users_m u JOIN (SELECT * FROM messages_m WHERE id_pol = '$id' AND id_otp = '$users' OR id_otp = '$id' AND id_pol = '$users' ORDER BY id DESC) m ON u.id = m.id_otp",$db);

ПОМОГИТЕ ПОЖАЛУЙСТА, а то я нгаправление в психиатрию скоро буду братьsmile
усли понадобиться softora.com/morda логины (tufanov@yandex.ru, lena@yandex.ru) 123456

Неактивен

 

#53 29.04.2010 12:55:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

serj011 написал:

нужен такой запрос что бы на одной странице выводились пользователи из таблицы users_m, которым отправили сообщения и от которых получили, но они должны не повторяться, если я отправил 65 и от него же получил, он групируеться.

SELECT u.* FROM users_m u JOIN (
SELECT DISTINCT id_otp FROM messages_m WHERE id_pol=63
UNION
SELECT DISTINCT id_pol FROM messages_m WHERE id_otp=63) m ON u.id = m.id_otp;

Неактивен

 

#54 29.04.2010 16:09:32

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

ребята вы гении, работает вроде как надо, тока поддаработать непросмотренные, удаление и т.п. с меня бутылкаsmile после этого я обязан на вас женитьсяsmilesmilesmile

Неактивен

 

#55 29.04.2010 16:31:13

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

ребята у меня теперь не получаеться подгнать к этому запросу "непрочитнные сообщения"
раньше был такой
$result88 = mysql_query("SELECT COUNT(*) FROM messages_m WHERE id_otp='$myrow5[id]' AND del_pol='0'");
$temp88 = mysql_fetch_array($result88);
$posts88 = $temp88[0];
$result33 = mysql_query("SELECT SUM(view) FROM messages_m WHERE id_otp='$myrow5[id]' AND del_pol='0'");
$temp33 = mysql_fetch_array($result33);
$posts33 = $temp33[0];
if ($posts88 >= $posts33) $view = '_akt'; else $view = '';

сначала считалось общее количество сообщений, потом общее количество просмотров где id_otp = '$myrow5[id]' потом сравнивает и если больше добавляет в цикле к классу приставку подстветки сообщений, а теперь я не пойму как реализовать это. если я пишу сообщение новому пользователю, оно у меня подстечиваеться сразу как не прочитанное, и пока он не прочитал, у меня не "потухнет"smile
а теперь он работает как то криво, может теперь нужно
принцип отметки о прочтении на странице переписки
$result_view = mysql_query ("UPDATE messages_m SET view='1' WHERE id_pol='$id' AND id_otp='$users'");

может подскажете, если знаете, как реализовать?

Неактивен

 

#56 29.04.2010 16:47:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

Логично непрочитанному сообщению делать view = 1, а прочитанному 0. Тогда, чтобы узнать есть ли непрочитанные сообщения вы считаете sum(view), и, если она больше 0, значит нужно подсвечивать.


SELECT u.*, m.`view` FROM users_m u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (
SELECT id_otp, `view` FROM messages_m WHERE id_pol=63 AND del_otp=0
UNION ALL
SELECT  id_pol, `view` FROM messages_m WHERE id_otp=63 AND del_pol=0) t GROUP BY id_otp) m ON u.id = m.id_otp;


UPD: поправил запрос.

Неактивен

 

#57 29.04.2010 17:26:00

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

я запрос поменял, но не совсем понял что дальше делать?
вот этот кож не нужно использовать или его нужно подкоректировать?
$result88 = mysql_query("SELECT COUNT(*) FROM messages_m WHERE id_otp='$myrow5[id]' AND del_pol='0'");
$temp88 = mysql_fetch_array($result88);
$posts88 = $temp88[0];
$result33 = mysql_query("SELECT SUM(view) FROM messages_m WHERE id_otp='$myrow5[id]' AND del_pol='0'");
$temp33 = mysql_fetch_array($result33);
$posts33 = $temp33[0];
if ($posts88 >= $posts33) $view = '_akt'; else $view = '';

Неактивен

 

#58 29.04.2010 17:49:23

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

я так подозреваю, что должно быть что то вроде этого, но явно не оноsmilesmilesmile
if ($myrow5['view'] == "1") $view = ''; else $view = '_akt';

Неактивен

 

#59 29.04.2010 18:06:17

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

vasya, я не пойму сути измененного запроса, если оставить такой код, он ЧАСТИЧНО работает, вот только когда я отправляю сообщение новому пользователю оно у меня подствечиваться как непрочитанное

if ($myrow5['view'] <= "0") $view = '_akt'; else $view = '';
0 - непрочитанное

Неактивен

 

#60 29.04.2010 23:53:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

serj011 написал:

vasya, я не пойму сути измененного запроса

Данный запрос вместе с выводом информации о пользователе сообщает сумму поля view из переписки с данным юзером.
Если сумма больше 0, значит есть непрочитанные сообщения. Предполагается, что у непрочитанных сообщений view равно 1, у прочитанных 0.

Неактивен

 

#61 30.04.2010 00:26:52

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

vasya написал:

serj011 написал:

vasya, я не пойму сути измененного запроса

Данный запрос вместе с выводом информации о пользователе сообщает сумму поля view из переписки с данным юзером.
Если сумма больше 0, значит есть непрочитанные сообщения. Предполагается, что у непрочитанных сообщений view равно 1, у прочитанных 0.

я конечно плохо понимаю суть, но мне кажеться что как то не так...

допустим переписка с пользователем продолжаеться некоторое время, и сумма view из переписки с пользователем равна 15!
если 15 больше 0 значит есть не прочитанные!!! значит в любом случае сообщения будут помечены как не прочитанные всегда!

или нужно в цикле состовлять какой то запрос?
типа if ($myrow5['view'] <= "0") $view = '_akt'; else $view = '';
помогите пожалуйста я чего то вообще не могу понять как теперь сделать!

я писал Вам что раньше, когда была одна страница, я в цикле подсчитывал сколько сообщений с этим пользователем, потом сколько просмотров с этим пользователем, а потом примерно такой фунццией if ($myrow5['view'] <= "0") $view = '_akt'; else $view = ''; определял больше или меньше и подставлял через %s подстветку непрочитанных.

а теперь на этой странице есть еще и просто отправленные, они то не должны помечаться как не прочитанные.

Неактивен

 

#62 30.04.2010 00:36:06

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

serj011 написал:

я конечно плохо понимаю суть, но мне кажеться что как то не так...

допустим переписка с пользователем продолжаеться некоторое время, и сумма view из переписки с пользователем равна 15!
если 15 больше 0 значит есть не прочитанные!!! значит в любом случае сообщения будут помечены как не прочитанные всегда!

Хм. Логично при прочтении пользователем сообщения изменять флаг view с 1 на 0.

Давайте мы определимся, что вы храните в базе 0 или 1, и что вам нужно посчитать. А то каждый о своем говорим.
5 строк с тестовыми данными спасут отца русской демократии wink

Неактивен

 

#63 30.04.2010 01:01:39

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

ну это не принципиально, ну вообще при создании сообщения в view заносится 0 - это не прочитанное, а когда я пользователь захожит в переписку view обновляется на 1
$result_view = mysql_query ("UPDATE messages_m SET view='1' WHERE id_pol='$id' AND id_otp='$users'");
раньше было такsmile

Неактивен

 

#64 30.04.2010 01:07:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

В 56 сообщении я предложил вам изменить эту схему и написал запрос, который будет при этом работать. Вы же использовали только запрос, а логику оставили прежней.

Если вы оставляете прежнюю схему, то вам придется как и ранее отдельными запросами считать общее количество сообщений, кол-во прочитанных и сравнивать их.

Неактивен

 

#65 30.04.2010 01:12:27

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

я честно говоря просто логику не понял, того как Вы это понимаете...
я запрос то изменил, а дальше что нужно делать...?
не могли бы Вы подробнее написать?

Неактивен

 

#66 30.04.2010 01:15:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

vasya написал:

Логично непрочитанному сообщению делать view = 1, а прочитанному 0.

Неактивен

 

#67 30.04.2010 01:19:44

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

это я понял, я изменю это, я просто вообще не пойму логики, не соображу как дальше. т.е. как мне в цикле подставить класс прочитанного и не прочитанного? и как отмечать когда оно стало прочитаннымsmile?

Неактивен

 

#68 30.04.2010 01:23:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

serj011 написал:

это я понял, я изменю это, я просто вообще не пойму логики, не соображу как дальше. т.е. как мне в цикле подставить класс прочитанного и не прочитанного?

Также как и раньше, только условие изменить:
if ($myrow5['view'] > 0) $view = '_akt'; else $view = '';

serj011 написал:

и как отмечать когда оно стало прочитаннымsmile?

Также как и раньше (UPDATE ...), только не 0 менять на 1, а наоборот.

Неактивен

 

#69 30.04.2010 01:29:54

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

ок я попробую.
у меня к Вам вопрос еще как к гуруsmile
Вы хоть и помогли мне с запросом, который вродеsmile рабботает, но мне все же интересно понять хотя бы суть.
весь этот запрос заноситься в $myrow5, может я совсем тупой вопрс задаю но если я напишу допустим echo $myrow5[id], то с какой таблицы вытащится это id?
$result5 = mysql_query("SELECT u.*, m.`view` FROM users_m u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (SELECT id_otp, `view` FROM messages_m WHERE id_pol='$myrow2[id]' AND del_otp='0' UNION ALL SELECT id_pol, `view` FROM messages_m WHERE id_otp='$myrow2[id]' AND del_pol='0') t GROUP BY id_otp) m ON u.id = m.id_otp;",$db);
$myrow5 = mysql_fetch_array($result5); наверное глупость написалsmile

Неактивен

 

#70 30.04.2010 01:35:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

SELECT u.*, m.`view` FROM users_m u ...
Запрос выбирает все поля из таблицы u (т.е.users_m) и поле view из таблицы m.
Следовательно id будет из таблицы users_m.

Кстати, вместо * лучше в явном виде писать выбираемые поля.

Неактивен

 

#71 30.04.2010 01:43:52

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

vasya, я уже так наверное и пробовал как Вы говорили, но я Вам писал что оно несовсем получаеться...
я установил в таблице view по умолчанию 1
переделал обновление $result_view = mysql_query ("UPDATE messages_m SET view='0' WHERE id_pol='$id' AND id_otp='$users'"); и
добавил в цикле if ($myrow5['view'] > 0) $view = '_akt'; else $view = ''; .....

проблемма в том когда я отправляю пользователю сообщение оно у меня  тоже подсвечиваться как новое, не прочитанное, а когда этот пользователь его прочитает, то и у меня оно тоже "тухнет"...
как быть?

Неактивен

 

#72 30.04.2010 01:46:41

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: проблемма с select

serj011 написал:

вот только когда я отправляю сообщение новому пользователю оно у меня подствечиваться как непрочитанное

Сразу поправлю запрос, чтобы в непрочитанных сообщениях не учитывались отправленные:

SELECT u.*, m.`view` FROM users_m u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (
SELECT id_otp, `view` FROM messages_m WHERE id_pol=63 AND del_otp=0
UNION ALL
SELECT  id_pol, 0 as`view` FROM messages_m WHERE id_otp=63) t GROUP BY id_otp) m ON u.id = m.id_otp;

Неактивен

 

#73 30.04.2010 01:59:50

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

нет, с этим запросом что то не то.... он вообще непонятно как выбирает, когда я отправляю сообщение пользователю, вместо того кому отправляю, выводятся мои данные... может ошибка где?

Неактивен

 

#74 30.04.2010 02:01:32

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

вот это я пропарилсяsmilesmilesmilesmilesmilesmilesmilesmilesmilesmilesmilesmile я всесто 63 не поставил $ капецsmile сейчас попробую
когда бы Вы еще так посмеялисьsmile

Неактивен

 

#75 30.04.2010 02:09:02

serj011
Активист
Зарегистрирован: 22.04.2010
Сообщений: 234

Re: проблемма с select

Вашими способностями можно только удивлятьсяsmile  огромное спасибо... мое предложение жениться на Вас остаеться в силеsmilesmilesmilesmilesmilesmile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson