IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Запрос MySQL. Поможите совсем запутался (https://www.imho.ws/showthread.php?t=130727)

metrim 21.03.2008 04:31

Запрос MySQL. Поможите совсем запутался
 
Что то совсем у меня башня не варит :(
Задача в общем то простая, а сообразить - не могу

Допустим есть таблица типа
1|2|3|4|5|

1|яблоко|Вася|что-то|75|
2|вишня|Коля|нечто|75|
3|кокос|Вася|хрень|75|
4|вишня|Оля|нечто|75|
5|вишня|Коля|нечто|75|
6|вишня|Оля|нечто|88|
7|вишня|Оля|нечто|75|
8|кокос|Вася|хрень|96|

Задача плучить результат вида:
1|яблоко|Вася|что-то|75|
2|вишня|Коля|нечто|75|
4|вишня|Оля|нечто|75|

Как сделать выборку по полю пять - понятно (WHERE 5=75)
А вот как заставить при этом выбирать только по одной записи из поля 3
Ежли б мне было нужно только одно поле 3, то можно было бы написвтть DISTINCT 3, однако мне нужны ВСЕполя :(

Кароче туплю
Поможите плз ...

metrim 21.03.2008 05:32

т.е. на самом то деле задача несколько сложнее конечно
Есть 2 таблицы форума одна с постами "Посты" в которых есть поля "участник" + "тема" и тд и таблица "Темы" с их описаниями
Задача: получить выборку тем, в которых отписывался "участник". При этом разумеется нужно получить лиш одну запись по теме, даже если участик там сделал 20 постов.
Вот что я хочу получить

Запрос вводящий всё подрят
SELECT * FROM Посты LEFT JOIN Темы ON Посты.тема=Темы.ID_Темы ORDER BY ...

Эта зараза выведет мне темы несколько раз, а нужно одну тему - однин раз

Saruman 21.03.2008 11:27

GROUP BY field3
GROUP BY ID_темы

metrim 21.03.2008 14:38

Цитата:

Сообщение от Saruman (Сообщение 1535179)
GROUP BY field3
GROUP BY ID_темы

Ну тады вроде нельзя делать "SELECT *"
Полязапроса подвергшиеся нгруппировке -должны в таком случае являться результатом вычислений, т.е. функций... :(
Например: MAX(field_1)
А мне описание темы - нужно целиком ....

добавлено через 3 минуты
вообще собственно обсуждаемым форумом является IPB 2.1.7
Я хочу туда прикрутить функцию "Темы в которых писал отсортированные по последнему посту в них"
Там вроде как должен быть очень простой запрос ...

Saruman 21.03.2008 17:57

Цитата:

Сообщение от metrim (Сообщение 1535233)
Ну тады вроде нельзя делать "SELECT *"
Полязапроса подвергшиеся нгруппировке -должны в таком случае являться результатом вычислений, т.е. функций...
Например: MAX(field_1)
А мне описание темы - нужно целиком ....

mysql должен понимать, что ты хочешь достать. Соответственно, или аггрегирующие функции на нужных полях (типа MAX), или перечисляй все поля в GROUP BY. Или же приводи конкретный пример таблицы с конкретными запросами, результатами и проблемами.

rnbox 22.03.2008 11:38

select t.* from `topics` t, (select max(`date`), `topic_id` from `posts` where `user_id`='$user_id' group_by `topic_id` having max(`date`)) q where t.`id`=q.`topic_id` order by q.`date`

metrim 06.04.2008 01:58

Вот следующий тупой вопрос
Уже совсем про другое :)

Вот допустим есть таблица. Там ест-но много полей. Есть поле timestamp со следующими значениями
1184256260
1184589319
1184840467
1186068453
1187019212
1188845910
1189698208
1197457131
и т.д.

Запрос:
SELECT * FROM news WHERE timestamp IN(1184840467,1187019212,1184589319)
Как мне уговорить Мускуль выдавать результаты именно в таком порядке, как задано в параметре IN() ?
а то он мне как честный выдаёт записи по тому порядку как они в базе лежат, т.е. 1184589319,1184840467,1187019212

Hubbitus 06.04.2008 21:52

Код:

SELECT *
FROM testINorder t INNER JOIN
        (
        SELECT 1184840467 as Ts, 1 as OrderCol
        UNION ALL
        SELECT 1187019212, 2
        UNION ALL
        SELECT 1184589319, 3
        ) InOrdTable ON (t.IntTstmp = InOrdTable.Ts)
ORDER BY OrderCol

Разумеется для этого требуется MySQL поддерживающая подзапросы, то есть с 5.0 вроде бы.

Saruman 06.04.2008 23:00

Цитата:

Сообщение от Hubbitus (Сообщение 1541131)
MySQL поддерживающая подзапросы, то есть с 5.0 вроде бы.

с 4.1, если точнее

metrim 07.04.2008 03:35

Hubbitus, ну это как то дико сложно :(
Проще уж просто загнать в цикл вытаскивание записей по одной из базы ...
Мне то надо сделать простенький универсальный запрос

Т.е. допустим приведённая таблица содержит статьи.
Другая таблица содержит категории. В одном из полей таблицы_категорий приведён список статей из таблицы_статей, т.е. "1184840467,1187019212,1184589319".
Их надо вывести ИМЕННО в том порядке, в котором они записаны в поле таблицы_категорий.

Saruman 07.04.2008 09:21

Цитата:

Сообщение от metrim (Сообщение 1541226)
В одном из полей таблицы_категорий приведён список статей из таблицы_статей, т.е. "1184840467,1187019212,1184589319".
Их надо вывести ИМЕННО в том порядке, в котором они записаны в поле таблицы_категорий.

SELECT * FROM mytable ORDER BY FIELD(myfield, "First", "Second", "Third", ....etc...)

metrim 07.04.2008 18:29

Saruman, угу. Вроде как раз то что надо
"Ведь можете когда захотите" :)
Осталось токма почитать по этой функции, нет ли каки косяков
Благодарствую за помощь


Часовой пояс GMT +4, время: 09:13.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.