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

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

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

Вы не зашли.

#1 27.02.2011 12:48:52

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

сортировка подзапросов

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

$result5 = mysql_query("SELECT u.*, m.`view` FROM users u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (SELECT id_otp, `view` FROM messages WHERE id_pol='$myrow2[id]' AND del_otp='0' UNION ALL SELECT id_pol, 0 as`view` FROM messages WHERE id_otp='$myrow2[id]' AND del_pol='0') t GROUP BY id_otp) m ON u.id = m.id_otp LIMIT $start, $num;",$db);

запрос выводит переписку нескольких пользователей, группируя при выводе по пользователям... проблемма в том что при выводе он сортирует не по сообщениям, а по пользователям... т.е. последнее сообщение пришло от пользователя 1, а в списке пользователи 1,2,3, то соощение от пользователя 1, може находится в конце списка, по id пользователя... (может не понятно написал, прикреплю скрин)


Прикрепленные файлы:
Attachment Icon 1.png, Размер: 44,229 байт, Скачано: 423

Неактивен

 

#2 27.02.2011 23:15:50

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

Re: сортировка подзапросов

А добавить ORDER BY не хотите? smile

Неактивен

 

#3 27.02.2011 23:44:47

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

Re: сортировка подзапросов

очень хочуsmile куда и как я его только не добавлял. пробывал и логически и наугад...

логически - добавил (id) SELECT u.*, m.`view`,ID  и добавлял ORDER BY m.id в разные места.... а наугад, у меня даже комп нагрелсяsmile
ORDER BY m.id, ORDER BY u.id, ORDER BY id все в разные местаsmile срабатывает только в одном месте ORDER BY u.id, но это сортирует не то что нужно...
плдскажите как правильно?

Неактивен

 

#4 28.02.2011 00:40:42

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

Re: сортировка подзапросов

А по какому полю Вы хотите сортировать?

Неактивен

 

#5 28.02.2011 20:27:20

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

Re: сортировка подзапросов

я хочу отсортировать по id таблицы messages. т.е. последне входящее или исходящее сообщение должно выводить всю группу переписки в самом верху... обратите внимание на картинку, там яснее... последнее сообщение, по id.m, отправленное или полученное от (lena455), а выводиться оно ниже чем переписка с другими пользователями, по id users...

Неактивен

 

#6 28.02.2011 22:15:40

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

Re: сортировка подзапросов

Ну так и добавьте —
SELECT ... (SELECT ... ORDER BY id DESC) ... GROUP BY id_otp ORDER BY NULL

Неактивен

 

#7 02.03.2011 01:24:54

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

Re: сортировка подзапросов

paulus написал:

Ну так и добавьте —
SELECT ... (SELECT ... ORDER BY id DESC) ... GROUP BY id_otp ORDER BY NULL

paulus, логически я понял смысл, но не получается. я забыл что можно использовать NULL для ORDER BY.

я добавил ORDER BY NULL, этим мы блокируем выборку по таблице users... а вот с ORDER BY id DESC не получается, может я его не туда вставляю, может что то не дописываю, но сразу ошибка выборки...

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

$result5 = mysql_query("SELECT u.*, m.`view` FROM users u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (SELECT id_otp, `view` FROM messages WHERE id_pol='$myrow2[id]' AND del_otp='0' UNION ALL SELECT id_pol, 0 as`view` FROM messages WHERE id_otp='$myrow2[id]' AND del_pol='0' ORDER BY id DESC) t GROUP BY id_otp ORDER BY NULL) m ON u.id = m.id_otp LIMIT $start, $num;",$db);

что я не так делаю?

Неактивен

 

#8 02.03.2011 14:06:19

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

Re: сортировка подзапросов

А что за ошибка то?

Неактивен

 

#9 02.03.2011 17:05:23

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

Re: сортировка подзапросов

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in Z:\home\84500.ru\www\love_messages.php on line 149

может в запросе какая ошибка?

Неактивен

 

#10 02.03.2011 20:11:46

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

Re: сортировка подзапросов

Да, в запросе какая-то ошибка wink

mysql_error() не забывайте, когда возвращается false.

Неактивен

 

#11 02.03.2011 23:54:46

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

Re: сортировка подзапросов

paulus написал:

Да, в запросе какая-то ошибка wink

mysql_error() не забывайте, когда возвращается false.

paulus, я не совсем понял что вы написали... расшифруйте пожалуйста

Неактивен

 

#12 03.03.2011 00:05:47

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

Re: сортировка подзапросов

FAQ №2

Неактивен

 

#13 03.03.2011 01:35:13

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

Re: сортировка подзапросов

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

$result5 = mysql_query("SELECT u.*, m.`view` FROM users u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (SELECT id_otp, `view` FROM messages WHERE id_pol='$myrow2[id]' AND del_otp='0' UNION ALL SELECT id_pol, 0 as`view` FROM messages WHERE id_otp='$myrow2[id]' AND del_pol='0' ORDER BY id DESC) t GROUP BY id_otp ORDER BY NULL) m ON u.id = m.id_otp LIMIT $start, $num;",$db);

я добавил

$result_r = mysql_query($result5) or die(mysql_error());

вывелось сообщение "Query was empty"

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

Неактивен

 

#14 03.03.2011 02:15:29

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

Re: сортировка подзапросов

paulus написал:

А добавить ORDER BY не хотите? smile

магистры sql, я не пойму неужели запрос настолько сложный, что нельзя добавить в него просто ORDER BY id по таблице messages или ORDER BY m.id? или не все так просто?smile

Неактивен

 

#15 03.03.2011 21:00:56

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

Re: сортировка подзапросов

У Вас ошибка где-то в PHP. Вы не хотите ее искать самостоятельно, а хотите, чтобы
искал я. Я тоже ошибку в PHP искать не хочу. mysql_query для одного запроса надо
писать один раз, а не два, как Вы написали.

Неактивен

 

#16 04.03.2011 11:44:33

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

Re: сортировка подзапросов

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

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

вот этот запрос, работает, только нужно чтобы группы сообщений выводлись по id таблицы messages

$result5 = mysql_query("SELECT u.*, m.`view` FROM users u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (SELECT id_otp, `view` FROM messages WHERE id_pol='$myrow2[id]' AND del_otp='0' UNION ALL SELECT id_pol, 0 as`view` FROM messages WHERE id_otp='$myrow2[id]' AND del_pol='0') t GROUP BY id_otp) m ON u.id = m.id_otp LIMIT $start, $num;",$db);
-----------------------------------------------------------------------------------------------------------------
если я добавляю ORDER BY id сюда "AND del_pol='0' ORDER BY id)" или сюда "t GROUP BY id_otp ORDER BY id", выдает ошибку "Unknown column 'id' in 'order clause'"...

насколько я понимаю ORDER BY id и не может срабатывать, поскольку в запросе нигде не вытаскивается id таблицы messages...

если я пытаюсь выташить этот id во-втором SELECT "SELECT id,id_otp, SUM(`view`)" - выдает ошибку "Unknown column 'id' in 'field list'"

а если в третьем "(SELECT id, id_otp, `view`" - то "The used SELECT statements have a different number of columns"

Неактивен

 

#17 04.03.2011 14:51:14

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

Re: сортировка подзапросов

Воо, это осмысленный текст ошибки. Он означает, что столбца id, по которому
Вы хотите сортировать, нету. Наверное, Вы хотите сортировать по id_otp? smile

Неактивен

 

#18 04.03.2011 19:28:22

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

Re: сортировка подзапросов

Нет, как раз по id_otp я могу отсортировать но мне это не нужно...

paulus написал:

Воо, это осмысленный текст ошибки. Он означает, что столбца id, по которому
Вы хотите сортировать, нету.

Вы имеете в виду что его нет в таблице messages? он есть, а вот почему его нельзя вытащить?

Неактивен

 

#19 04.03.2011 21:39:30

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

Re: сортировка подзапросов

Значит, его нужно достать из самого внутреннего запроса вместе с id_otp.

Неактивен

 

#20 04.03.2011 21:58:13

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

Re: сортировка подзапросов

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

если я пытаюсь выташить этот id во-втором SELECT "SELECT id,id_otp, SUM(`view`)" - выдает ошибку "Unknown column 'id' in 'field list'"

а если в третьем "(SELECT id, id_otp, `view`" - то "The used SELECT statements have a different number of columns"

я вас прошу, просмотрите еще раз запрос и посмотрите как из него вытащить id из таблицы messages?

Неактивен

 

#21 05.03.2011 00:53:33

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

Re: сортировка подзапросов

SELECT u.*, m.`view` FROM users u JOIN (SELECT id_otp, SUM(`view`) `view` FROM (SELECT id_otp, id, `view` FROM messages WHERE id_pol='$myrow2[id]' AND del_otp='0' UNION ALL SELECT id_pol, id, 0 as`view` FROM messages WHERE id_otp='$myrow2[id]' AND del_pol='0') t GROUP BY id_otp ORDER BY id) m ON u.id = m.id_otp LIMIT $start, $num

Добавить во внутренний подзапрос.

Неактивен

 

#22 05.03.2011 11:47:04

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

Re: сортировка подзапросов

paulus, спасибо за помощьsmile
я не знал что нужно продублировать id еще раз, что вытащить...
правда так как вы написали выше запрос, он все равно работал не так... после долгих мучений я еще пробудлировал ORDER BY id "del_pol='0' ORDER BY id)"
теперь вроде работает. спасибоsmile

Неактивен

 

Board footer

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