Нахождение данных по релевантности, а затем взять 2 результата из diff домена - PullRequest
3 голосов
/ 20 августа 2010

У меня так много доменных имен в моей БД, например

www.yahoo.com/duniya.html
www.yahoo.com/hero.html
www.123musiq.com/
www.123musiq.com/home.html
www.123musiq.com/horo.html
www.123musiq.com/yuva.html
www.sensongs.com/
www.sensongs.com/hindi.html
www.sensongs.com/yuva.html
www.sensongs.com/duniya.html
www.sensongs.pk/duniya1.html

Мне нужно отсортировать их следующим образом: сначала 2 из Yahoo, затем следующие 2 из 123musiq, затем следующие 2 из Sensongs Как я могу это сделать? в MySQL или PHP? я знаю, чтобы получить доменное имя, мне нужно знать, как сортировать 2 из каждого домена?
я использую матч против метода

Ожидаемый результат

    www.yahoo.com/duniya.html
    www.yahoo.com/hero.html
    www.123musiq.com/
    www.123musiq.com/home.html
    www.sensongs.com/
    www.sensongs.com/hindi.html
  

Я использую следующий код
SELECT x.url
  FROM (SELECT t.url,
               CASE 
                 WHEN @domain = SUBSTRING_INDEX(t.url, '/', 1) THEN @rownum := @rownum + 1
                 ELSE @rownum := 1
               END AS rank,
               @domain := SUBSTRING_INDEX(t.url, '/', 1)
          FROM URL2 t
          JOIN (SELECT @rownum := 0, @domain := '') r
      ORDER BY SUBSTRING_INDEX(t.url, '/', 1)) X
 WHERE x.rank <= 2 AND MATCH(teet,url,html) AGAINST ('account');

Это показывает ошибку
Query : SELECT x.url   FROM (SELECT t.url,                CASE                   WHEN @domain = SUBSTRING_INDEX(t.url, '/', 1) THEN @row...
Error Code : 1054
Unknown column 'teet' in 'where clause'

Но Teet - это столбец в моей таблице URL2

1 Ответ

2 голосов
/ 20 августа 2010

MySQL не имеет аналитических функций, и вам нужно получить две записи для каждой группы.Другая боль - "www."затрудняет локализацию 2-го периода ...

Использование:

SELECT x.url
  FROM (SELECT t.url,
               t.teet,
               t.html,
               CASE 
                 WHEN @domain = SUBSTRING_INDEX(t.url, '/', 1) THEN @rownum := @rownum + 1
                 ELSE @rownum := 1
               END AS rank,
               @domain := SUBSTRING_INDEX(t.url, '/', 1)
          FROM URL2 t
          JOIN (SELECT @rownum := 0, @domain := '') r
      ORDER BY SUBSTRING_INDEX(t.url, '/', 1)) x
 WHERE x.rank <= 2
...