и снова выборка уникального

zerkms

TDD infected
Команда форума
и снова выборка уникального

привет. я к вам вот с каким вопросом:
у меня есть табла структуры например такой:
id | edit | name | time
1 1 asd 5
1 2 asdas 6
1 3 asdasd 8
я делаю запрос примерно такой:
SELECT id, max(edit) as edit, name, time FROM table GROUP BY id
но результат выборки получается не совсем такой, как я хочу, а именно выборка даёт:
1 3 asd 5, хотя по моему замыслу должно быть выбрано:
1 3 asdasd 8.
т.е. нужно найти максимальное edit в пределах уникального id, и чтоб в результат выборки вошли все поля записи в которой max(id).
заранее благодарен.
 

Фанат

oncle terrible
Команда форума
извини, но твои замыслы неизвестны базе данных.
и ей надо строго их указывать.
если надо чтобы вошли, то делай джойн той же самой таблицы по edit=edit
кстати, на этом примере видно, как неумно называть результат работы функции тем же имеенм, что и поле.

называть именем id не автоинкрементное поле - это, конечно, не запрещено, но создаст БОЛЬШИЕ проблемы себе и окружающим.

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

-~{}~ 05.06.04 13:20:

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

lucas

Guest
Фанат

Все понял, потестил и потер бред.
 

chira

Новичок
лучше всего сделать через временную таблицу:
Код:
CREATE TEMPORARY TABLE tt AS
SELECT id, max(edit) as edit FROM table GROUP BY id

SELECT t.*
FROM table t, tt
WHERE t.id=tt.id AND t.edit=tt.edit
 

zerkms

TDD infected
Команда форума
т.е. одним запросом это будет сделать проблематично / нереально??
лан, тогда сделаю выборку всех с сортировкой по edit DESC а потом буду проверять
PHP:
if (текущий id != прошлый id) {
    иди в обработку
    }
else {
    не иди в обработку
    }
этот вариант имеет право на существование или всё таки лучше извратнутся чем нибудь типа промежуточной таблицы??
 

Фанат

oncle terrible
Команда форума
.е. одним запросом это будет сделать проблематично
неужели я непонятно написал?
джойн той же самой таблицы
-~{}~ 06.06.04 07:19:

chira
я теперь понимаю раздражение three daws
уж больно с тупыми советами ты влезаешь.

-~{}~ 06.06.04 07:21:

zerkms
лан, тогда сделаю выборку всех с сортировкой по edit DESC
при таком подходе тебе база данных не нужна.
храни все в текстовом файле.
если ты ВСЕ РАВНО рассатриваешь базу данных, как простыню,которую можно читать тоьлко последовательно
 

zerkms

TDD infected
Команда форума
2 Фанат:
пардон, не заметил.
JOIN, хм. я про него ничего не нашёл в мане про sql с opennet'a. будь добр подскажи как сделать.

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

Фанат

oncle terrible
Команда форума
ты из двух таблиц выборку умеешь делать?
из двух связанных таблиц?
если да - то так и делай, только не из двах разных, а из одной и той же, через запятую
 

.des.

Поставил пиво кому надо ;-)
Автор оригинала: Фанат
неужели я непонятно написал?

~~
если надо чтобы вошли, то делай джойн той же самой таблицы по edit=edit
кстати, на этом примере видно, как неумно называть результат работы функции тем же имеенм, что и поле.
Совсем непонятно. Не затруднит объяснить?

Автор оригинала: Фанат
chira
я теперь понимаю раздражение three daws
уж больно с тупыми советами ты влезаешь.
А мне иногда непонятно терпение окружающих к Вашему хамству. В данном случае, хамство граничит с непониманием вопроса.

chira дал верный совет и в mysql это по другому не решается.

называть именем id не автоинкрементное поле - это, конечно, не запрещено, но создаст БОЛЬШИЕ проблемы себе и окружающим.
Это что за требование такое? Смысл его скрыт от моего воображения. Не поможете?

приводить в своем вопросе не реальную базу, а нацарапанные второпях каракули - еще более неумно.
рекомендую тебе забыть такую практику.
для собственного же блага
Это единственное утверждение с которым можно согласиться.
 

Фанат

oncle terrible
Команда форума
SELECT max(t1.edit) as maxedit, t2.name from table t1,table t2 GROUP BY id WHERE t2.edit=maxedit
А мне иногда непонятно терпение окружающих к Вашему хамству.
давно ли ты начал ко мне на вы обращаться?
не терпят, можешь не переживать
пойди в служебку, настучи - меры примут.
потом пойдете со своим другом пивка выпьете, и ты будешь рассказывать своему другу чире, как ты его любишь и как ты за него порвешь любого, защитничек
Это что за требование такое? Смысл его скрыт от моего воображения. Не поможете?
не помогу. не понял - не лезь.
 

.des.

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

SELECT max(t1.edit) as maxedit, t2.name from table t1,table t2 GROUP BY id WHERE t2.edit=maxedit
Где такой синтаксис работает?
И что именно он должен делать?
 

Фанат

oncle terrible
Команда форума
хммм, странно. сейчас проверил - не получается.
но я точно так делал. но это было давно.
придется перед чирой извинится.
извини, chira, за грубость.
 

zerkms

TDD infected
Команда форума
т.е. это:
SELECT max(t1.edit) as maxedit, t2.name from table t1,table t2 GROUP BY id WHERE t2.edit=maxedit
работать не будет?
я звиняюсь за некомпетентность, но сказал бы что не вижу ошибок (проверить под рукой не где)
значит я ещё в больших непонятках, т.к. после прочтения всех манов по данной теме алгоритм бы сделал такой же.
жду с нетерпением комментов опытных товарищией


может это и не то, но как вариант, нельзя ли взять в рассмотрение этот:
http://phpclub.ru/talk/showthread.php?threadid=51014&rand=2
 
Сверху