Задавайте вопросы, мы ответим
Вы не зашли.
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 пользователя... (может не понятно написал, прикреплю скрин)
Неактивен
А добавить ORDER BY не хотите?
Неактивен
очень хочу куда и как я его только не добавлял. пробывал и логически и наугад...
логически - добавил (id) SELECT u.*, m.`view`,ID и добавлял ORDER BY m.id в разные места.... а наугад, у меня даже комп нагрелся
ORDER BY m.id, ORDER BY u.id, ORDER BY id все в разные места срабатывает только в одном месте ORDER BY u.id, но это сортирует не то что нужно...
плдскажите как правильно?
Неактивен
А по какому полю Вы хотите сортировать?
Неактивен
я хочу отсортировать по id таблицы messages. т.е. последне входящее или исходящее сообщение должно выводить всю группу переписки в самом верху... обратите внимание на картинку, там яснее... последнее сообщение, по id.m, отправленное или полученное от (lena455), а выводиться оно ниже чем переписка с другими пользователями, по id users...
Неактивен
Ну так и добавьте —
SELECT ... (SELECT ... ORDER BY id DESC) ... GROUP BY id_otp ORDER BY NULL
Неактивен
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);
что я не так делаю?
Неактивен
А что за ошибка то?
Неактивен
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
может в запросе какая ошибка?
Неактивен
Да, в запросе какая-то ошибка
mysql_error() не забывайте, когда возвращается false.
Неактивен
paulus написал:
Да, в запросе какая-то ошибка
mysql_error() не забывайте, когда возвращается false.
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' 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"
я имеел ввиду, что сам запрос может правильно составлен, может есть ошибка какая техническая... я в подзапросах плохо разбираюсь, тем более в таких сложных.
Неактивен
paulus написал:
А добавить ORDER BY не хотите?
магистры sql, я не пойму неужели запрос настолько сложный, что нельзя добавить в него просто ORDER BY id по таблице messages или ORDER BY m.id? или не все так просто?
Неактивен
У Вас ошибка где-то в PHP. Вы не хотите ее искать самостоятельно, а хотите, чтобы
искал я. Я тоже ошибку в PHP искать не хочу. mysql_query для одного запроса надо
писать один раз, а не два, как Вы написали.
Неактивен
paulus, я понимаю что достал Вас уже этим запросом... запрос для меня очень сложный, Вы мне его помогли написать, и мне больше не к кому обратиться за помощью... я хочу, и ищу ошибку, но найти ее не могу
может я Вам расспишу свои мысли по этому поводу и Вам будет легче мне помочь, если Вам не сложно...
вот этот запрос, работает, только нужно чтобы группы сообщений выводлись по 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"
Неактивен
Воо, это осмысленный текст ошибки. Он означает, что столбца id, по которому
Вы хотите сортировать, нету. Наверное, Вы хотите сортировать по id_otp?
Неактивен
Нет, как раз по id_otp я могу отсортировать но мне это не нужно...
paulus написал:
Воо, это осмысленный текст ошибки. Он означает, что столбца id, по которому
Вы хотите сортировать, нету.
Вы имеете в виду что его нет в таблице messages? он есть, а вот почему его нельзя вытащить?
Неактивен
Значит, его нужно достать из самого внутреннего запроса вместе с id_otp.
Неактивен
я же писал выше, что пытался добавить 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?
Неактивен
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
Добавить во внутренний подзапрос.
Неактивен
paulus, спасибо за помощь
я не знал что нужно продублировать id еще раз, что вытащить...
правда так как вы написали выше запрос, он все равно работал не так... после долгих мучений я еще пробудлировал ORDER BY id "del_pol='0' ORDER BY id)"
теперь вроде работает. спасибо
Неактивен