Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка из ДБ / 25 сообщений из 26, страница 1 из 2
03.07.2014, 11:24:30
    #38686587
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Есть три таблице в article лежать статьи, в author лежат авторы, в article_author какой автор написал статью
article
num | title
_____________
1 | статья1
2 | статья2
3 | статья3

author
num | title | letter
___________________
1 | автор1 | А
2 | автор2 | Г
3 | автор3 | Б

article_author
author | article
_____________
1 | 1
1 | 3
3 | 3

Сперва должно вывести все статьи, сортировка по "letter" алфавиту авторов, а потом статьи у которых нету авторов
Должно вывести: статья1, статья3, статься2(у статьи 2 нету автора, она выводиться последняя)

select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter

выводит: статья1, статья3 а вот вывести статью 3 не получается
...
Рейтинг: 0 / 0
03.07.2014, 11:38:16
    #38686607
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Перепутал
выводит: статья1, статья3 а вот вывести статью "2" не получается
...
Рейтинг: 0 / 0
03.07.2014, 12:23:45
    #38686693
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Если необходимо получить записи, для которых нет соответствия в другой таблице, следует использовать стороннее связывание (LEFT JOIN).
...
Рейтинг: 0 / 0
03.07.2014, 12:34:24
    #38686710
expmozgi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 

*,
IF (ISNULL(au.letter), 'Я', au.letter) AS letterS

FROM article a

LEFT JOIN article_author aa ON aa.article = a.num 
LEFT JOIN author au ON au.num = aa.autor

GROUP BY a.num

ORDER BY letterS ASC
...
Рейтинг: 0 / 0
10.07.2014, 14:46:49
    #38693275
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Написал запрос

(select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter)
UNION ALL
(SELECT article.* FROM article LEFT JOIN article_author ON (article.num=article_author.article) WHERE article_author.article IS NULL)

По отдельности:
1 запрос выводит все заметки и сортирует по авторам (А,Б,В....) (выводит правильно)
2 запрос выводит все заметки у которых нету авторов (выводит правильно)

а вот как совмещаю эти два запроса непонятно как сортирует, в чем может быть проблема?
...
Рейтинг: 0 / 0
10.07.2014, 14:57:26
    #38693297
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
antonDevНаписал запрос

(select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter)
UNION ALL
(SELECT article.* FROM article LEFT JOIN article_author ON (article.num=article_author.article) WHERE article_author.article IS NULL)

По отдельности:
1 запрос выводит все заметки и сортирует по авторам (А,Б,В....) (выводит правильно)
2 запрос выводит все заметки у которых нету авторов (выводит правильно)

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

SUPER HACK

(select * from table where field <> "" order by field)
UNION
(select * from table)

что выведет???

в твоем случае - всё верно.что значит фраза не понятно как сортирует...у тебя в выводе три записи - ты не можешь увидеть вкаком они порядке?
...
Рейтинг: 0 / 0
10.07.2014, 15:39:42
    #38693409
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Блин)) выводит правильно с данными которые я написал в самом начале а вот с реальной БД не получаеться
...
Рейтинг: 0 / 0
10.07.2014, 17:04:05
    #38693598
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
antonDev, а вы "SUPER HACK" в начало запроса прописали?

Если серьёзно, то дело может быть в union ALL. Хотя не зная, что конкретно "не получаеться" (повбывав бы(с)), точно сказать ничего нельзя.
...
Рейтинг: 0 / 0
10.07.2014, 18:07:13
    #38693689
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
tanglirantonDev, а вы "SUPER HACK" в начало запроса прописали?

Если серьёзно, то дело может быть в union ALL. Хотя не зная, что конкретно "не получаеться" (повбывав бы(с)), точно сказать ничего нельзя.

я проверял..в его случае юнион олл или юнион не влияют на результат...тоже подумал - мало ли...может без ОЛЛ оно не делает отдельно сортировку первого запроса....

вообщем без разницы.
...
Рейтинг: 0 / 0
10.07.2014, 18:09:39
    #38693692
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
antonDevБлин)) выводит правильно с данными которые я написал в самом начале а вот с реальной БД не получаеться

так мы сдесь соритруем по букве, в выводе которой нету - может в реальной базе там немного не то что вы думаете??? нул например, пустая строка, или буква но не первая автора... и вам кажеться что не верно отработала сортировка.
...
Рейтинг: 0 / 0
10.07.2014, 18:43:23
    #38693728
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Вот этот запрос 1
select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter
выводит как должно, сначала статья с автором А, статья с автором Б, статья с автором В

А с этим запросом 2
(select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter)
UNION ALL
(SELECT article.* FROM article LEFT JOIN article_author ON (article.num=article_author.article) WHERE article_author.article IS NULL)

Выводит статья с автором Б ,сначала статья с автором А, статья с автором В, потом все статьи без автора, хотя должно выводить как с запросом 1 сперва А,Б,В, потом без автора, получается не сортируется по алфавиту
...
Рейтинг: 0 / 0
10.07.2014, 19:08:51
    #38693753
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
тю...мы все дружно провтычили, что у одной статьи, несколько авторов !!!

дистинкт убирает дубли, но не гарантирует что во время сортировки, возмёться имено первое.

ИБО

СНАЧАЛА ОТРАБАТЫВАЕТ ДИСТИНКТ (секция селект)

А ПОТОМ СОРТИРОВКА

Код: plaintext
1.
2.
3.
4.
select IF(pole > 100, 100,pole) 'syaka_masyaka', ...
from ...
where ...
order by `syaka_masyaka`

если бы ордер бай первее секции селект обрабатывался, как бы выполнился этот запрос!!!
ЗЫ
типо предупреждаю возможную реплику о не логичности поведения...
...
Рейтинг: 0 / 0
10.07.2014, 19:16:18
    #38693756
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
что делать

0) решить каким образом сортировать статьи, если авторов несколько!



например давай так - брать автора с большим айди

1) тогда из таблицы связующей и авторов, получить таблицу где будет связь только с одним
автором!
Код: plaintext
1.
2.
3.
select articleid,max(authorid) as 'authorid'
from articles_authors
grou by articleid

и её использовать у себя, вкачестве таблицы связи


если брать автора с большей буквой,
2) тогда как выше берём связь таблиц связи , авторы, и налогично получаем таблицу авторы+связи, притом что на один айдишник, приходиться один автор
как это сделать ---см в фак в ветке, как выбрать первую последнюю запись в групах
...
Рейтинг: 0 / 0
11.07.2014, 05:32:34
    #38693936
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
alex564657498765453,


alex564657498765453ИБО

СНАЧАЛА ОТРАБАТЫВАЕТ ДИСТИНКТ (секция селект)

А ПОТОМ СОРТИРОВКАкхм...

http://dev.mysql.com/doc/refman/5.0/en/union.html However, use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows. Therefore, the use of ORDER BY in this context is typically in conjunction with LIMIT, so that it is used to determine the subset of the selected rows to retrieve for the SELECT, even though it does not necessarily affect the order of those rows in the final UNION result. If ORDER BY appears without LIMIT in a SELECT, it is optimized away because it will have no effect anyway.

To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one.
...
Рейтинг: 0 / 0
11.07.2014, 11:30:55
    #38694129
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
tangliralex564657498765453,


alex564657498765453ИБО

СНАЧАЛА ОТРАБАТЫВАЕТ ДИСТИНКТ (секция селект)

А ПОТОМ СОРТИРОВКАкхм...

http://dev.mysql.com/doc/refman/5.0/en/union.html However, use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows. Therefore, the use of ORDER BY in this context is typically in conjunction with LIMIT, so that it is used to determine the subset of the selected rows to retrieve for the SELECT, even though it does not necessarily affect the order of those rows in the final UNION result. If ORDER BY appears without LIMIT in a SELECT, it is optimized away because it will have no effect anyway.

To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one.

интересная вещь...а я и незнал.

проверил по плану запроса, действительно без лимита не используеться filesort, а с лимитом используеться.

кхм... - это что???

ЗЫ
молодца, когда ТС исправил бы ошибку с двоякостью автора для статьи, нарвался бы на этот момент. смотришь в будущие Тангир
...
Рейтинг: 0 / 0
11.07.2014, 11:55:28
    #38694162
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
alex564657498765453кхм... - это что???это покашливание
а от удивления оно или намекающее - решать вам :)
...
Рейтинг: 0 / 0
11.07.2014, 14:35:12
    #38694398
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Я все правильно написал, у статьи может быть два автора
...
Рейтинг: 0 / 0
11.07.2014, 16:03:52
    #38694534
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
antonDevЯ все правильно написал, у статьи может быть два автора

да но не написал, чью букву надо брать для сортировки
...
Рейтинг: 0 / 0
11.07.2014, 17:12:24
    #38694636
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Также по алфавиту, сперва А потом Б
Просто в запросе (2) где два запроса, не сортирует по полю letter, отдельно запрос (№1 выборка статей с авторами) срабатывает, а вот когда их совмещаю то похоже не срабатывает ORDER BY author.letter
...
Рейтинг: 0 / 0
11.07.2014, 17:35:01
    #38694666
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
antonDevТакже по алфавиту, сперва А потом Б
Просто в запросе (2) где два запроса, не сортирует по полю letter, отдельно запрос (№1 выборка статей с авторами) срабатывает, а вот когда их совмещаю то похоже не срабатывает ORDER BY author.letter

невнимательный барин, что значит сперва А потом Б , если мы статьи выводим а не авторов.
есть статья с авторами А и В
и статья с автором Б, первая должна ити до или после??? типо автор с буквой А важнее автора с буквой В??

а на не срабатывание уже ответили
...
Рейтинг: 0 / 0
11.07.2014, 17:45:14
    #38694673
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Да, автор А важнее автора Б
...
Рейтинг: 0 / 0
11.07.2014, 17:48:25
    #38694676
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
alex564657498765453есть статья с авторами А и В
и статья с автором Б, первая должна ити до или после??? типо автор с буквой А важнее автора с буквой В??В реальных задачах (а эта явно учебная) авторы имеют свой порядок применительно к каждой книге. И сортировка, например, картотек происходит по их ФИО именно с учетом этого порядка. Т.е. о ФИО первого автора. При их равенстве - по ФИО второго. И т.д.
...
Рейтинг: 0 / 0
11.07.2014, 17:49:31
    #38694679
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Всем спасибо, все получилось))
...
Рейтинг: 0 / 0
11.07.2014, 17:50:13
    #38694680
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
antonDevДа, автор А важнее автора БВы так и не понял вопрос.
Например, если одну книгу написали Ворошилов и Антонов, а другую - Баранов. То какая книга должна идти раньше и почему?
...
Рейтинг: 0 / 0
11.07.2014, 18:18:32
    #38694701
antonDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из ДБ
Сперва книга Ворошилова и Антонова, потом книга Баранова, т.к. Антонов по алфавиту первый)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка из ДБ / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]