Задавайте вопросы, мы ответим
Вы не зашли.
блин. есть тут умные программеры. не такие как я.... помогите плиз...
Смысл такой, я хочу сделать сообщения на сайте по принципу как на mamba.ru. что бы когда заходишь в папку сообщений выводились пользователи (без вывода сообщений) с которыми была переписка, у меня отдельно выводиться страница с входящими и исходящими, я их там объеденил с помощью DISTINCT, а вот общая папка не полчаеться потому что уникальные значения выводяться не из двух столбцов, а из каждого по отдельности.
Это код страницы отправленные сообщения, сдесь все ОК. вроде Код:
$result5 = mysql_query("SELECT DISTINCT avatar_pol,gender_pol,id_pol,name_pol,id_pol FROM messages_m WHERE id_otp = '$myrow2[id]' ORDER BY id DESC LIMIT 5",$db);
такой же на странице входящиею
но если я обобщаю id_otp и id_pol выводяться уникальные только по оному из столбцов.
помогите плиз, я уже затраха.....
softora.com/test
логин lena@yandex.ru пароль 123456
Отредактированно serj011 (22.04.2010 17:50:26)
Неактивен
Честно говоря, ничего не понял, но есть ощущение, что Вы хотите сделать не
DISTINCT, а GROUP BY
Попробуйте еще раз сформулировать, конкретно что должен выводить запрос,
и опишите структуру таблиц.
Неактивен
блин я уже в шоке. столь умных мыслей посоветовали везде, ничего не подходит... ничего не мучу
у меня к каждому сообщению есть свой ID(но мне кажеться что он пока тут ни при чем), вот часть моей таблицы (id,id_pol,id_otp,name_pol,name_otp,text) остальная на данный момент не имеет значения. Я думаю все понятно id_otp - id отправителя, id_pol - id получателя. на самом деле с страницами входящие и исходящие все ОК, с помощью DISTINCT выводяться пользователи, которые отправили или получили сообщения не дублируясь.
Код:
$result5 = mysql_query("SELECT DISTINCT avatar_pol,gender_pol,id_pol,name_pol,id_pol FROM messages_m WHERE id_otp = '$myrow2[id]'",$db);
или id_pol. конец сказки все работает.
а вот как сделать запрос что бы таким же образом выводились и входящие и исходящие на одной странице, как на мамбе допустим.
я делал такой запросю при таком запросе вытаскиваються абсолютно все сообщения
Код:
$result5 = mysql_query("SELECT avatar_pol,avatar_otp,id_pol,id_otp,name_pol,name_otp FROM messages_m WHERE id_pol='$myrow2[id]' OR id_otp='$myrow2[id]'",$db);
если добавить DISTINCT уникальные значения пользователей, но отдельно из отправленных и из входящих
Код:
$result5 = mysql_query("SELECT DISTINCT avatar_pol,avatar_otp,id_pol,id_otp,name_pol,name_otp FROM messages_m WHERE id_pol='$myrow2[id]' OR id_otp='$myrow2[id]'",$db);
а я хочу совместить, т.е. если один и тот же пользователь и отпрвил и получил одному и томуже он выводился один раз, опять же как в мамбе....
толи я туплю конкретно, то ли запрос слишком сложный нужно загнуть, я просто вообщето типа лузер, но опытный
люди помогите.....
Неактивен
paulus, если зайти на softora.com/test login lena@yandex.ru пароль 123456, видно что всего у этого пользователя 2 уникальных контакта (не в зависимости от количества сообщений) в полученных и входящих сообщениях, а в общей папке один контакт дудлируеться и выводиться, т.к. сообщения от него есть полученные и отправленные...
Неактивен
Даже зашел на Ваш сайт Не видно, что два уникальных контакта. На мамбе
я не был (и регистрироваться там не хочу, правда)
Рискну предположить, что Вы хотите следующее:
SELECT DISTINCT id_pol FROM messages_m WHERE id_otp=$me
UNION
SELECT DISTINCT id_otp FROM messages_m WHERE id_pol=$me
Неактивен
огромное спасибо. я этим вопросом занимаюсь сегодня целый день, получил штук 15 советов, но ни один не был так близко к цели чем ваш
только все равно небольшая проблеммка, скорее всего она большая, если ее нельзя будет решить...
уникальные значения вытаскиваються как нужно, только без все информации, так как на выборке стоит только SELECT DISTINCT id_pol и SELECT DISTINCT id_otp, я вместо них пытался поставить *, но выборка сразу опять выбирает все без уникальных значений. Попробовал добавить к ним например id_pol,name_pol и id_otp,name_otp, но сразу выдает ошибку
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\test\oll_messages.php on line 92
Подскажите пожалуйста, как быть?
Неактивен
кстати мне на одном из форумов предложили такой вариант, он очень похож на Ваш, но у меня не заработал, если есть у Вас несколько секунд, интересно знать Ваш комментарий
(SELECT `pol`
FROM `mes`
WHERE `otp`='$id'
OR `pol`='$id')
UNION
(SELECT `otp`
FROM `mes`
WHERE `otp`='$id'
OR `pol`='$id')
Неактивен
Ну, синтаксически он правильный, но, вроде, ищет не то, что Вы хотели.
Что касается получения данных — добавьте просто соответствующие колонки:
SELECT DISTINCT id_pol, name_pol, ... FROM messages_m WHERE id_otp=$me
UNION
SELECT DISTINCT id_otp, name_otp, ... FROM messages_m WHERE id_pol=$me
Хотя, конечно, это не очень правильный способ. Лушче будет и получателей,
и отправителей держать в отдельной таблице (например, users), и данные
вытаскивать уже из нее:
SELECT name, avatar, ...
FROM users
WHERE id IN (SELECT id_otp ... UNION SELECT ...)
Неактивен
Спасибо огромное за помощь, я действительно так и сделал с users. Но дополнительные колоники вытащить не получаеться с messages_m, я непойму в чем дело, я всегда так делал (* или через запятую вытаскивал то что нужно), а теперь после SELECT можно поставить всего лишь одно значение id_otp или любое другое, но одно, а если несколько выдает ошибку
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\test\messages_all.php on line 96
НОНСОНС!!! может быть дело в DISTINCT, я им никогда раньше не пользовался!? Подскажите пожалуйста в чем может быть проблемма? хотя у убирал DISTINCT после селектов, запрос работает вроде также корректно????????????
Неактивен
Количество столбцов в UNION должно совпадать. Т.е. можно, например, делать
SELECT id_pol, name_pol FROM messages_m
UNION
SELECT id_otp, name_otp FROM messages_m
а вот так нельзя:
SELECT id_pol, name_pol FROM messages_m
UNION
SELECT id_otp FROM messages_m
Тем не менее, хранить имя получателя в сообщении не стоит (т.к. оно есть в users).
Неактивен
вот у меня такой запрос, как Вы сказали, а вре равно ошибка
$result5 = mysql_query("SELECT * FROM users_m WHERE id IN (SELECT DISTINCT id_pol, view_pol FROM messages_m WHERE id_otp='$myrow2[id]' UNION SELECT DISTINCT id_otp, view_otp FROM messages_m WHERE id_pol='$myrow2[id]')",$db);
Неактивен
Ах вот что Вы хотите. Через IN не получится. Попробуйте вот так:
SELECT u.*, m.view_pol
FROM users_m u
JOIN (SELECT DISTINCT id_pol, view_pol FROM messages_m WHERE id_otp='$myrow2[id]' UNION SELECT DISTINCT id_otp, view_otp FROM messages_m WHERE id_pol='$myrow2[id]') m USING (u.id = m.id_pol);
Неактивен
ничего себе запросик
я попробовал вставилБ но он сразу выдает ошибку
$result5 = mysql_query("SELECT u.*, m.view_pol FROM users_m u JOIN (SELECT DISTINCT id_pol, view_pol FROM messages_m WHERE id_otp='$myrow2[id]' UNION SELECT DISTINCT id_otp, view_otp FROM messages_m WHERE id_pol='$myrow2[id]') m USING (u.id = m.id_pol);",$db);
Я понимаю что достал уже вас своим смелектом , но не могли бы Вы посмотреть, может там где ошибка, т.к. я в этом запросе даже суть не пойму
Неактивен
Аха, действительно, вместо USING должно быть ON
И текст ошибки пишите вдальнейшем, чтобы не гадать
Неактивен
я поменял USING на ON, массив заработал, но возникла таже проблемма с которой все начиналось
в массив вытаскиваються уникальные значения по id_pol и id_otp в отдельности, т.е если я написал пользователю и он мне, этот пользователь выводиться дважды
Неактивен
А что такое view_pol? Почему он нужен, и что делать, когда их два — какой из них
надо выводить?
Неактивен
я еще точто сам не ришил как я это буду делать но поле view планируеться для отметки о просмотре сообщентия, и я еще не сообразил, нужно ьтолько View или еще View _pol, View_otp
Неактивен
Вам не нужно их выбирать. Вам нужно их добавить в WHERE соответствующей
выборки. А выбирать только id.
Неактивен
а можно подробнее...
Неактивен
у меня еще есть к Вам один вопрос, помогите пожалуйста, когда будет свободная минута. я сделал как Вы советовали, выбираю данные сообщения пользователя из users_m, я переделал и входящие и исходящие, вот три запроса
это все (полученные и отправленные)
$result5 = mysql_query("SELECT * FROM users_m WHERE id IN (SELECT DISTINCT id_pol FROM messages_m WHERE id_otp='$myrow2[id]' UNION SELECT DISTINCT id_otp FROM messages_m WHERE id_pol='$myrow2[id]')",$db);
это только полученные
$result5 = mysql_query("SELECT * FROM users_m WHERE id IN (SELECT DISTINCT id_otp FROM messages_m WHERE id_pol='$myrow2[id]')",$db);
это только отправленные
$result5 = mysql_query("SELECT * FROM users_m WHERE id IN (SELECT DISTINCT id_pol FROM messages_m WHERE id_otp='$myrow2[id]')",$db);
вроде все выбирает нормально.
но появилась новая проблемма, как теперь выбрать именно тексты сообщений, по плану они у меня должны быть приблизительно как в мамбе. раньше когда все данные пользователя хранились и messages_m они выбирались, а теперь я не знаю как правильно составить запрос. Помогите пожалуйста....
Неактивен
вот как у меня раньше выбиралось
$result5 = mysql_query("SELECT * FROM messages_m WHERE id_pol = '$id' AND id_otp = '$users' OR id_otp = '$id' AND id_pol = '$users' ORDER BY id DESC",$db);
Неактивен
Возможно, если Вы пытаетесь скопировать мамбу, Вам имеет смысл устроиться в мамбу?
Придумайте, что запрос должен выбирать окончательно — тогда его можно будет написать.
Неактивен
нет, (тем более я совсем не собираюсь делать сайт знакомст) я как и Вы не в восторге от мамбы, просто мне нужно сделать на своем сайте сообщения, и за основу я взял реализацию сообщений на мамбе просто я никогда не занимался реализацией сообщений...
и все же, если Вы мне подскажете как мне теперь реализовать запрос, который будет выводить переписку пользоватлей из таблицы messages_m, на основе таблицы users, я буду Вам очень благодарен
мой старый запрос был такой
$result5 = mysql_query("SELECT * FROM messages_m WHERE id_pol = '$id' AND id_otp = '$users' OR id_otp = '$id' AND id_pol = '$users' ORDER BY id DESC",$db);
Неактивен
Ну, Вы так и не рассказали, что должен делать запрос Например, если у Вас
есть 10 входящих и 7 исходящих непрочитанных сообщений — текст какого
сообщения должен он выбирать?
Неактивен
проблемма с непрочитанными сообщения это дело десятое я прошу Вас помочь мне с запросом по выборке самих сообщений.
спомощью этого запроса у меня выбираються сообщения между двумя пользователями....
$result5 = mysql_query("SELECT * FROM messages_m WHERE id_pol = '$id' AND id_otp = '$users' OR id_otp = '$id' AND id_pol = '$users' ORDER BY id DESC",$db);
а как сделать такой запрос что бы информация о пользователе выбиралась из таблицы users_m а сами сообщения из messages_m и дата сообщений
примероно так как в запросе
$result5 = mysql_query("SELECT * FROM users_m WHERE id IN (SELECT DISTINCT id_pol FROM messages_m WHERE id_otp='$myrow2[id]' UNION SELECT DISTINCT id_otp FROM messages_m WHERE id_pol='$myrow2[id]')",$db);
Неактивен