left join (MySQL)

B
На сайте с 13.09.2010
Offline
1
834

Что-то туплю... можно ли при левом объединении взять с правой таблице не все записи подходящие по ключу, а только первую попавшуюся?

Что-то типа LIMIT-а, но для выборки из второй таблицы.

N
На сайте с 06.05.2007
Offline
419
#1

сгруппируй значения в правой таблице - они перестанут повторяться.

Кнопка вызова админа ()
NS
На сайте с 30.09.2008
Offline
54
#2

если по-простому, то нет. можно сделать функцию и считать. можно сгруппировать по уникальному картежу.

B
На сайте с 13.09.2010
Offline
1
#3

Сгруппировать нельзя. Вернее можно но оно нарушает сортировку по "MATCH ... AGAINST"

N
На сайте с 06.05.2007
Offline
419
#4

blicklg, ничего не мешает match against поставить в результаты выборки и получить еще числовую колонку в виде релевантности. а там уже и отсортируете как удобно :

select title, match(title) against ('mysql') as score from ....where match (title) against ('mysql')...

B
На сайте с 13.09.2010
Offline
1
#5

netwind, от того что я поставлю в результат выборки колонку релевантности, разве что-нить измениться?

На данный момент схема запроса такова.

SELECT *

FROM table1

WHERE match(table1.fieds1, table1.fieds2..) AGAINST('"tekst"' IN BOOLEAN MODE)

ORDER BY MATCH(table1.fieds1, table1.fieds2..) AGAINST('"tekst')

Если добавляю LEFT JOIN и GROUP BY, то сортировка полей меняется, хотя условия те же

N
На сайте с 06.05.2007
Offline
419
#6

blicklg, если написано order by, то как sql может воспротивиться ? может вы потратите время и сделаете воспроизводимый sql-скрипт с данными и запросом и тогда станет понятнее?

думал, вы хотите делать left join ( select match(..) as score, .. as groip_id ... group by group_id ) on .... order by score - вот тут может потребоваться выбирать колонку чтобы ее "протащить наверх" и в итоге отсортировать. это должно быть лучше в смысле производительности, чтобы не мучать группировкой и временной таблицей все объединенные строки, а только лишь одну таблицу.

ДП
На сайте с 23.11.2009
Offline
203
#7

Вот тут , как мне кажется, рассматривается несколько аналогичный случай - http://habrahabr.ru/qa/437/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий