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

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

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

Вы не зашли.

#1 22.04.2010 12:50:15

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

проблемма с select

блин. есть тут умные программеры. не такие как я....smile помогите плиз...
Смысл такой, я хочу сделать сообщения на сайте по принципу как на mamba.ru. что бы когда заходишь в папку сообщений выводились пользователи (без вывода сообщений) с которыми была переписка, у меня отдельно выводиться страница с входящими и исходящими, я их там объеденил с помощью DISTINCT, а вот общая папка не полчаеться потому что уникальные значения выводяться не из двух столбцов, а из каждого по отдельности.

Это код страницы отправленные сообщения, сдесь все ОК. вроде smile Код:
$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)

Неактивен

 

#2 22.04.2010 18:14:00

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

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

Честно говоря, ничего не понял, но есть ощущение, что Вы хотите сделать не
DISTINCT, а GROUP BY smile

Попробуйте еще раз сформулировать, конкретно что должен выводить запрос,
и опишите структуру таблиц.

Неактивен

 

#3 22.04.2010 19:55:39

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

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

блин я уже в шоке. столь умных мыслей посоветовали везде, ничего не подходит... ничего не мучуsmile

у меня к каждому сообщению есть свой ID(но мне кажеться что он пока тут ни при чемsmile), вот часть моей таблицы (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);



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

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

люди помогите.....

Неактивен

 

#4 22.04.2010 20:11:33

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

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

paulus, если зайти на softora.com/test login lena@yandex.ru пароль 123456, видно что всего у этого пользователя 2 уникальных контакта (не в зависимости от количества сообщений) в полученных и входящих сообщениях, а в общей папке один контакт дудлируеться и выводиться, т.к. сообщения от него есть полученные и отправленные...

Неактивен

 

#5 22.04.2010 22:09:07

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

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

Даже зашел на Ваш сайт smile Не видно, что два уникальных контакта. На мамбе
я не был (и регистрироваться там не хочу, правда) smile

Рискну предположить, что Вы хотите следующее:

SELECT DISTINCT id_pol FROM messages_m WHERE id_otp=$me
UNION
SELECT DISTINCT id_otp FROM messages_m WHERE id_pol=$me

Неактивен

 

#6 22.04.2010 22:53:24

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

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

огромное спасибо. я этим вопросом занимаюсь сегодня целый день, получил штук 15 советов, но ни один не был так близко к цели чем вашsmile
только все равно небольшая проблеммка, скорее всего она большая, если ее нельзя будет решить...
уникальные значения вытаскиваються как нужно, только без все информации, так как на выборке стоит только 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
Подскажите пожалуйста, как быть?

Неактивен

 

#7 22.04.2010 22:58:07

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

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

кстати мне на одном из форумов предложили такой вариант, он очень похож на Ваш, но у меня не заработал, если есть у Вас несколько секунд, интересно знать Ваш комментарий

(SELECT `pol`
  FROM    `mes`
  WHERE `otp`='$id'
     OR `pol`='$id')
   UNION
(SELECT `otp`
  FROM    `mes`
  WHERE `otp`='$id'
     OR `pol`='$id')

Неактивен

 

#8 23.04.2010 01:50:04

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

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

Ну, синтаксически он правильный, но, вроде, ищет не то, что Вы хотели.

Что касается получения данных — добавьте просто соответствующие колонки:
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 ...)

Неактивен

 

#9 23.04.2010 15:53:18

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

Re: проблемма с 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

НОНСОНС!!!smile может быть дело в DISTINCT, я им никогда раньше не пользовался!? Подскажите пожалуйста в чем может быть проблемма? хотя у убирал DISTINCT после селектов, запрос работает вроде также корректно????????????

Неактивен

 

#10 23.04.2010 16:20:59

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

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

Количество столбцов в 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).

Неактивен

 

#11 23.04.2010 16:37:26

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

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

вот у меня такой запрос, как Вы сказали, а вре равно ошибка

$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);

Неактивен

 

#12 23.04.2010 17:12:23

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

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

Ах вот что Вы хотите. Через 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);

Неактивен

 

#13 23.04.2010 17:24:47

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

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

ничего себе запросик smilesmilesmile
я попробовал вставилБ но он сразу выдает ошибку

$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);

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

Неактивен

 

#14 23.04.2010 17:39:19

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

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

Аха, действительно, вместо USING должно быть ON smile

И текст ошибки пишите вдальнейшем, чтобы не гадать smile

Неактивен

 

#15 23.04.2010 17:53:46

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

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

я поменял USING на ON, массив заработал, но возникла таже проблемма с которой все начиналосьsmile

в массив вытаскиваються уникальные значения по id_pol и id_otp в отдельности, т.е если я написал пользователю и он мне, этот пользователь выводиться дважды sad

Неактивен

 

#16 23.04.2010 18:03:57

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

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

А что такое view_pol? Почему он нужен, и что делать, когда их два — какой из них
надо выводить?

Неактивен

 

#17 23.04.2010 18:11:18

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

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

я еще точто сам не ришил как я это буду делать но поле view планируеться для отметки о просмотре сообщентия, и я еще не сообразил, нужно ьтолько View или еще View _pol,  View_otp

Неактивен

 

#18 23.04.2010 18:29:35

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

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

Вам не нужно их выбирать. Вам нужно их добавить в WHERE соответствующей
выборки. А выбирать только id.

Неактивен

 

#19 23.04.2010 18:43:00

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

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

а можно подробнее...

Неактивен

 

#20 23.04.2010 18:58:15

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

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

у меня еще есть к Вам один вопрос, помогите пожалуйста, когда будет свободная минута. я сделал как Вы советовали, выбираю данные сообщения пользователя из 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 они выбирались, а теперь я не знаю как правильно составить запрос. Помогите пожалуйста....

Неактивен

 

#21 23.04.2010 19:10:07

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

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

вот как у меня раньше выбиралось

$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);

Неактивен

 

#22 23.04.2010 19:10:41

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

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

Возможно, если Вы пытаетесь скопировать мамбу, Вам имеет смысл устроиться в мамбу? smile

Придумайте, что запрос должен выбирать окончательно — тогда его можно будет написать.

Неактивен

 

#23 23.04.2010 19:30:03

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

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

нетsmile, (тем более я совсем не собираюсь делать сайт знакомст) я как и Вы не в восторге от мамбы, просто мне нужно сделать на своем сайте сообщения, и за основу я взял реализацию сообщений на мамбеsmile просто я никогда не занимался реализацией сообщений...
и все же, если Вы мне подскажете как мне теперь реализовать запрос, который будет выводить переписку пользоватлей из таблицы messages_m, на основе таблицы users, я буду Вам очень благодаренsmile

мой старый запрос был такой
$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);

Неактивен

 

#24 23.04.2010 19:39:09

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

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

Ну, Вы так и не рассказали, что должен делать запрос smile Например, если у Вас
есть 10 входящих и 7 исходящих непрочитанных сообщений — текст какого
сообщения должен он выбирать?

Неактивен

 

#25 24.04.2010 00:10:35

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

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

проблемма с непрочитанными сообщения это дело десятоеsmile я прошу Вас помочь мне с запросом по выборке самих сообщений.

спомощью этого запроса у меня выбираються сообщения между двумя пользователями....
$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);

Неактивен

 

Board footer

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