2015-07-04 3 views
0

Я хотел бы найти столбец в таблице для каждого члена другого столбца и распечатать результаты. Я написал for-loop в PHP, но он слишком интенсивный, поскольку он включает слишком много запросов. Я открыт для использования любого веб-языка.Поиск столбца против каждого члена другого столбца

$search1=mysql_query(SELECT COLUMN2 FROM TABLE WHERE COLUMN1 LIKE %Search_term%); 
    for($i=0; i < $search1->num_rows; $i++){ 
     $search2=mysql_query(SELECT COLUMN1 FROM TABLE WHERE COLUMN1 LIKE %Seach_term% AND COLUMN1 LIKE “%$search1[$i]%” LIMIT 3); 
     echo “$search2[0]”; 
     echo “$search2[1]”; 
     echo “$search2[2]”; 
     echo “<P>”; 
     $i++; 
} 

Есть ли способ сделать это без выполнения инструкции select для каждого экземпляра цикла for? Если бы я мог выбрать его один раз, а затем процитировать в SQL и отсортировать или сгруппировать его, я был бы так счастлив. Я посмотрел в GROUPBY или SORTBY, но не смог найти пример, чтобы применить его к этому.

спасибо.

edit: example table 

    id  column1      column2 
    1   walk park dog win for good  walk 
    2   walk go forward do win dog  go 
    3   park job forward daycare a  park 
    4   go with me certified job I  with 
    5   dolphin job park walk care  dolphin 
    6   pack for good park go job  for 
    7   leader forward win dog for  leader 
    8   leader go forward win walk  forward 
    9   tablet forward go walk for  tablet 
    10  Jones job me certfied do go job 


results of searching by column2 into column1: 

walk go forward do win dog 
dolphin job park walk care 
leader go forward win walk 

walk go forward do win dog 
go with me certified job I 
pack for good park go job 

walk park dog win for good 
park job forward daycare a 
dolphin job park walk care 

go with me certified job I 

dolphin job park walk care 

walk park dog win for good 
leader forward win dog for 
tablet forward go walk for 

leader forward win dog for 
leader go forward win walk 

walk go forward do win dog 
park job forward daycare a 
leader forward win dog for 

tablet forward go walk for 

park job forward daycare a 
go with me certified job I 
dolphin job park walk care 

-

Фактическая таблица 25000000 литература цитаты, а второй столбец одни и те же цитаты с общим стоп-слова вынутых. Мечта состоит в объединении общих цитат вместе.

Еще раз спасибо.

+1

Не могли бы вы предоставить нам более подробную информацию о связанных таблицах и о том, как между ними связаны данные? –

+0

Я просто предоставил образец таблицы и пояснил ссылку. – user3643012

ответ

1

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

Просто любой удар - в то числе, например, «прогулка парк собаки выиграть хороший» для «идти» и «лидер идти вперед выиграть прогулку» за «за»:

SELECT 
    c2.column2 
    , c1.column1 
    , c1.id 
FROM citation c1 
JOIN citation c2 
    ON INSTR(c1.column1, c2.column2) 
ORDER BY c2.column2, c1.column1 
; 

Немного более избирательно - ограничение матчей полных слов:

SELECT 
    c2.column2 
    , c1.column1 
    , c1.id 
FROM citation c1 
JOIN citation c2 
    ON FIND_IN_SET(c2.column2, REPLACE(c1.column1, ' ', ',')) 
ORDER BY c2.column2, c1.column1 
; 

Этот способ, однако, даже простые множественном (не образуется путем добавления просто «S») больше не пойман - сравнить добавляемые одиннадцатый рекорд, который возвращается в «дельфины» но больше не для «дельфина» во втором запросе ниже SQL Fiddle.

в действии: SQL Fiddle

Это, безусловно, нуждается в настройке/более подробные требования.

Лично я не вижу, как «вторая колонка - это те же цитаты с обычными словами остановки» - поскольку я нахожу только одно слово в этой колонке.
Я бы, возможно, начал с чего-то на столе с помощью только (предварительно обработанных) цитат (которые ссылаются на оригиналы) и списка слов, который включает в себя слова «производные формы». (В качестве альтернативы, предварительная обработка цитат может позаботиться об этом аспекте.) Простой SQL, разумеется, не будет учитывать разницу между существительным «прогулка» и глаголом «прогулка». В том числе и то, что на выходе, как в этом SQL Fiddle, просто будет напоминанием для человека, работающего над ним, - если это имеет значение в вашем контексте.

В зависимости от ваших фактических (общих) требований, возможно, стоит заглянуть в MySQL's full text functionalities.

Прокомментируйте, если и как это требует регулировки/дальнейшие детали.

Смежные вопросы