Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 12.03.2015, 20:40   #1
телочка на авке клевая?
 
Аватар для 10012003
 
Регистрация: 14.09.2008
Адрес: Замкадье.
Сообщений: 1,522
Вес репутации: 262
10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее
По умолчанию Объеденить 2 запроса к 1 таблице с сортировкой mysql

есть запрос
(SELECT DISTINCT `userid` FROM `mail` WHERE `fromid`=27 AND `sf`<2 )
UNION
(SELECT DISTINCT `fromid` FROM `mail` WHERE `userid`=27 AND `ok`<2)
ORDER BY `id` DESC
LIMIT 0,12

выдает ошибку #1054 - Unknown column 'id' in 'order clause'
если убрать ORDER BY `id` DESC то все работает, но нужна сортировка

по отдельности запросы работают, но итоговое количество получиться больше 12

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

Добавлено через 3 минуты
Собственно яндекс с гуглом предлагают запрос составить именно так, но я не понимаю почему он не работает
так же как и не работает запрос такого вида
(SELECT DISTINCT `userid` FROM `mail` WHERE `fromid`=27 AND `sf`<2 ORDER BY `id` DESC)
UNION
(SELECT DISTINCT `fromid` FROM `mail` WHERE `userid`=27 AND `ok`<2 ORDER BY `id` DESC)
ORDER BY `id` DESC
LIMIT 0,12

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

Добавлено через 17 часов 14 минут
Вот забанили ПГ а он знает, что надо было сделать так
(SELECT DISTINCT `userid`, `id` FROM `mail` WHERE `fromid`=27 AND `sf`<2 )
UNION
(SELECT DISTINCT `fromid`, `id` FROM `mail` WHERE `userid`=27 AND `ok`<2)
ORDER BY `id` DESC
LIMIT 0,12

Добавлено через 1 час 2 минуты
правда все равно корректо не работает

Последний раз редактировалось 10012003; 12.03.2015 в 20:40. Причина: Добавлено сообщение
10012003 вне форума   Ответить с цитированием
Старый 12.03.2015, 21:41   #2
Мастер
 
Аватар для Igor V
 
Регистрация: 13.05.2010
Адрес: Nsk
Сообщений: 776
Вес репутации: 185
Igor V скоро станет известен
По умолчанию

Цитата:
Сообщение от 10012003 Посмотреть сообщение
правда все равно корректо не работает
(SELECT DISTINCT `userid`, `fromid`, `id` FROM `mail` WHERE `fromid`=27 AND `sf`<2 )
UNION
(SELECT DISTINCT `userid`, `fromid`, `id` FROM `mail` WHERE `userid`=27 AND `ok`<2)
ORDER BY `id` DESC
LIMIT 0,12

mysql дно..

Последний раз редактировалось Igor V; 12.03.2015 в 21:47. Причина: Добавлено сообщение
Igor V вне форума   Ответить с цитированием
Старый 12.03.2015, 21:53   #3
телочка на авке клевая?
 
Аватар для 10012003
 
Регистрация: 14.09.2008
Адрес: Замкадье.
Сообщений: 1,522
Вес репутации: 262
10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее
По умолчанию

Цитата:
Сообщение от Igor V Посмотреть сообщение
(SELECT DISTINCT `userid`, `id` FROM `mail` WHERE `fromid`=27 AND `sf`<2 )
UNION
(SELECT DISTINCT `fromid` AS `userid`, `id` FROM `mail` WHERE `userid`=27 AND `ok`<2)
ORDER BY `id` DESC
LIMIT 0,12
не то так выводит несколько userid, а надо только уникальные

userid id
1 277
1 276
41 275
73 274
1 273
46 272
73 271
180 270
148 269
81 268
77 267
70 266

Добавлено через 2 минуты
Цитата:
Сообщение от Igor V Посмотреть сообщение
(SELECT DISTINCT `userid`, `fromid`, `id` FROM `mail` WHERE `fromid`=27 AND `sf`<2 )
UNION
(SELECT DISTINCT `userid`, `fromid`, `id` FROM `mail` WHERE `userid`=27 AND `ok`<2)
ORDER BY `id` DESC
LIMIT 0,12
тот же результат

Последний раз редактировалось 10012003; 12.03.2015 в 21:53. Причина: Добавлено сообщение
10012003 вне форума   Ответить с цитированием
Старый 12.03.2015, 22:54   #4
Мастер
 
Аватар для Igor V
 
Регистрация: 13.05.2010
Адрес: Nsk
Сообщений: 776
Вес репутации: 185
Igor V скоро станет известен
По умолчанию

А точно "уникальные значения пользователей"(поле `userid`) нужны зачем тогда делать вторую выборку где всегда `userid`=27

SELECT DISTINCT `userid` FROM `mail` WHERE (`fromid`=27 AND `sf`<2) OR (`userid`=27 AND `ok`<2)

или все таки 12 последних id из таблицы mail нужны?

SELECT t1.id FROM mail AS t1 WHERE t1.fromid=27 AND t1.sf<2
LEFT JOIN (SELECT id FROM mail WHERE userid=27 AND ok<2) AS t2 ON t1.id<>t2.id
ORDER BY id DESC
LIMIT 0,12

Последний раз редактировалось Igor V; 12.03.2015 в 23:02. Причина: Добавлено сообщение
Igor V вне форума   Ответить с цитированием
Старый 12.03.2015, 23:07   #5
телочка на авке клевая?
 
Аватар для 10012003
 
Регистрация: 14.09.2008
Адрес: Замкадье.
Сообщений: 1,522
Вес репутации: 262
10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее
По умолчанию

вторая выборка нужна так как первая выберает кому я написал, а вторая кто написал мне
Цитата:
Сообщение от Igor V Посмотреть сообщение
SELECT DISTINCT `userid` FROM `mail` WHERE (`fromid`=27 AND `sf`<2) OR ( `userid`=27 )
такой запрос не даст нужного результата

Цитата:
Сообщение от Igor V Посмотреть сообщение
SELECT t1.id FROM mail AS t1 WHERE t1.fromid=27 AND t1.sf<2
LEFT JOIN (SELECT id FROM mail WHERE userid=27 AND ok<2) AS t2 ON t1.id<>t2.id
ORDER BY id DESC
LIMIT 0,12
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN (SELECT id FROM mail WHERE userid=27 AND ok<2) AS t2 ON t1.id<>t2.id ' at line 2
10012003 вне форума   Ответить с цитированием
Старый 12.03.2015, 23:16   #6
Мастер
 
Аватар для Igor V
 
Регистрация: 13.05.2010
Адрес: Nsk
Сообщений: 776
Вес репутации: 185
Igor V скоро станет известен
По умолчанию

Прям хоть ставь себе mssql

А это сожрет?

SELECT DISTINCT `userid` FROM (
(SELECT DISTINCT `userid` FROM `mail` WHERE `fromid`=27 AND `sf`<2 ORDER BY `id` DESC LIMIT 0,12)
UNION
(SELECT DISTINCT `fromid` AS `userid` FROM `mail` WHERE `userid`=27 AND `ok`<2 ORDER BY `id` DESC LIMIT 0,12)
)
LIMIT 0,12
Igor V вне форума   Ответить с цитированием
Старый 12.03.2015, 23:36   #7
телочка на авке клевая?
 
Аватар для 10012003
 
Регистрация: 14.09.2008
Адрес: Замкадье.
Сообщений: 1,522
Вес репутации: 262
10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее
По умолчанию

Все решено, может кому пригодится
SELECT id, userid
FROM (
(

SELECT `userid` AS userid
FROM `mail`
WHERE `fromid` =27
AND `sf` <2
)
UNION (

SELECT `id` , `fromid`
FROM `mail`
WHERE `userid` =27
AND `ok` <2
)
ORDER BY id DESC
)t
GROUP BY userid
ORDER BY id DESC

От себя спасибо ПГ за помощь

Добавлено через 2 минуты
Цитата:
Сообщение от Igor V Посмотреть сообщение
Прям хоть ставь себе mssql

А это сожрет?

SELECT DISTINCT `userid` FROM (
(SELECT DISTINCT `userid` FROM `mail` WHERE `fromid`=27 AND `sf`<2 ORDER BY `id` DESC LIMIT 0,12)
UNION
(SELECT DISTINCT `fromid` AS `userid` FROM `mail` WHERE `userid`=27 AND `ok`<2 ORDER BY `id` DESC LIMIT 0,12)
)
LIMIT 0,12

#1248 - Every derived table must have its own alias

Добавлено через 17 минут
ошибся немного
SELECT id, userid
FROM (
(

SELECT `userid`
FROM `mail`
WHERE `fromid` =27
AND `sf` <2
)
UNION (

SELECT `id` , `fromid` AS userid
FROM `mail`
WHERE `userid` =27
AND `ok` <2
)
ORDER BY id DESC
)t
GROUP BY userid
ORDER BY id DESC

Последний раз редактировалось 10012003; 12.03.2015 в 23:36. Причина: Добавлено сообщение
10012003 вне форума   Ответить с цитированием
Старый 12.03.2015, 23:48   #8
Мастер
 
Аватар для Igor V
 
Регистрация: 13.05.2010
Адрес: Nsk
Сообщений: 776
Вес репутации: 185
Igor V скоро станет известен
По умолчанию

Цитата:
Сообщение от 10012003 Посмотреть сообщение
ошибся немного
Очень нехороший запрос будет тормозить.. компактней было бы вспомогательную таблицу завести чтобы каждый раз основную не трясти..
Igor V вне форума   Ответить с цитированием
Старый 13.03.2015, 00:32   #9
телочка на авке клевая?
 
Аватар для 10012003
 
Регистрация: 14.09.2008
Адрес: Замкадье.
Сообщений: 1,522
Вес репутации: 262
10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее10012003 - прекрасное будущее
По умолчанию

Цитата:
Сообщение от Igor V Посмотреть сообщение
чень нехороший запрос будет тормозить.. компактней было бы вспомогательную таблицу завести чтобы каждый раз основную не трясти..
да мне тоже не очень нравиться, но вспомогательная таблица не вариант, так как придется для каждого пользователя свою таблицу создавать
10012003 вне форума   Ответить с цитированием
Старый 13.03.2015, 00:42   #10
Мастер
 
Аватар для Igor V
 
Регистрация: 13.05.2010
Адрес: Nsk
Сообщений: 776
Вес репутации: 185
Igor V скоро станет известен
По умолчанию

Цитата:
Сообщение от 10012003 Посмотреть сообщение
да мне тоже не очень нравиться, но вспомогательная таблица не вариант, так как придется для каждого пользователя свою таблицу создавать
Зачем, самое примитивное можно в таблице users просто текстовое поле завести где через разделитель хранить список последних id, при добавлении сообщения последний стирать новый в начало списка добавлять..

Ну или одна таблица id, userid, sourceid где так же добавлять новую запись для пользователя и удалять последнюю..

Последний раз редактировалось Igor V; 13.03.2015 в 00:47.
Igor V вне форума   Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перенести строку в таблице в другую БД Akvas Разработка и сопровождение сайтов 2 24.09.2013 20:26
Объеденить проекты в один aftersvideo1 Вопросы от новичков 1 07.11.2010 18:10
Скрипт поиска по таблице... lbmoney Разработка и сопровождение сайтов 8 13.08.2010 00:52
2-а аккаунта объеденить в один, как?? dfg Курилка 2 04.06.2008 15:18
У ВМ календарь с сортировкой не работает. 9dVSnVN6 Ошибки при работе с системой 0 02.06.2008 18:39


Часовой пояс GMT +3, время: 01:06.