2012-02-02 6 views
0

Так что я боролся с этим последние пару дней .. У меня есть музыкальные жанры. Отдельно от первичных и вторичных колоний. Rock/Progressive rock и т. Д. И у меня есть так, что он будет искать один столбец, просто отлично. Но я бы хотел, чтобы он искал либо colum. поиск помощи в Google. Я обнаружил, что поиск в теории FULLTEXT в теории должен сделать это. Я устанавливаю индекс FULLTEXT как для первичного, так и для вторичного столбцов. Но я не смог заставить его работать.FULLTEXT Поиск нескольких столбцов в MySQL?

это мой код, который работает для одной колонки:

$query = sprintf("SELECT * FROM musicgenres WHERE secondary LIKE '%%%s%%' LIMIT 20", mysql_real_escape_string($_GET["q"])); 

$arr = array(); 
$rs = mysql_query($query); 

while($obj = mysql_fetch_object($rs)) { 
    $arr[] = $obj; 
} 

$json_response = json_encode($arr); 

if($_GET["callback"]) { 
    $json_response = $_GET["callback"] . "(" . $json_response . ")"; 
} 


$final = str_replace(genre_id, id, $json_response); 
echo $final; 

(Он возвращает результаты в формате JSON)

Я пытался следовать этому учебнику я обнаружил, что дает это в качестве примера:

$term = "Search Term"; 

    $sql = "SELECT *, MATCH(title, content) AGAINST('". $term ."') as score FROM pages WHERE MATCH (title, content) AGAINST('". $term ."') ORDER BY score DESC"; 
    $query = mysql_query($sql); 

вопрос кажется либо в запросе SELECT. или когда я его совмещаю. это вызывает ошибку с этой линии:

while($obj = mysql_fetch_object($rs)) { 

самый последний запрос Select я попытался было:

$term = mysql_real_escape_string($_GET["q"]); 

$sql = "SELECT *, MATCH(primary, secondary) AGAINST('". $term ."') as score FROM musicgenres WHERE MATCH (primary, secondary) AGAINST('". $term ."') ORDER BY score DESC"; 

я также попытался с: '%% %%% s' LIKE (который будет быть более полезным, поскольку частичные совпадения были бы хороши)

в любом случае. если у вас есть какие-либо советы, которые могли бы мне помочь, я бы его оценил .. спасибо ... Dev

+0

Какую ошибку он вернется? попробуйте запрос непосредственно на mysql, как в phpmyadmin, попробуйте использовать mysql_fetch_array –

+0

Ошибка: Предупреждение: mysql_fetch_object(): предоставленный аргумент не является допустимым ресурсом результата MySQL в C: \ Web Pages \ PHP \ GenreTest.php в строке 29 [] – Dev

+0

Строка 29: while ($ obj = mysql_fetch_object ($ rs)) { – Dev

ответ

0

Ok попробовать этот запрос

SELECT column1, column2, ..., MATCH(primary, secondary) AGAINST('". $term ."') as score 
FROM musicgenres 
WHERE MATCH (primary, secondary) AGAINST('". $term ."') 
ORDER BY score DESC" 

Если работа доцент попытаться удалить матч() против() от выбора пункта

SELECT column1, column2, ... FROM .... 
+0

Thats right write primary как '\' primary \ '' –

2

Я не уверен на 100%, что вы ищете, но если вы хотите найти несколько столбцов, как это должно работать:

"SELECT * FROM musicgenres WHERE secondary LIKE '%%%s%%' OR primary LIKE '%%%s%%' LIMIT 20" 

Надеюсь, что это близко к тому, что вы ищете.

+0

Я пробовал это несколько раз ... он вызывает ошибку Parse: ошибка синтаксического анализа, ожидая 'T_STRING 'или' T_VARIABLE' или 'T_NUM_STRING 'в C: \ Web Pages \ PHP \ GenreTest.php в строке 30 - часть превратив его в JSON Response, чтобы моя страница могла использовать его данные. – Dev

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