Forum Webscript.Ru
Общие => Базы данных => Тема начата: tarya от 21 Августа 2002, 15:35:19
-
у меня есть сайт, пока толком не разобрался как работает поиск по сайту у других, но слышалл такую интересную вещь что все данные находятся также в базе данных и когда чел делает запрос ему отыскивается та инфо и выдается ссылка на страницу,..
я решил чтото подобное сделать но не смог составить запрос чтобы из кучи слов выбралось одно . я написал так
$query = "SELECT * from u_find where data=\'$word\'"; но это неправильно :(, помогите составить запрос чтооб отыскалось нужное слово.
я обещяю купить книгу по My SQL
-
нужно чтоб из всей таблицы, скокаб я там не сделал полей все просмотрело и нашло то слово и вывело тут строку.
помогите пожалуста.
-
Выбирай названия столбцов (EXPLAIN table_name)
Далее строй запрос следующим образом:
SELECT * FROM table_name WHERE col_name1 LIKE \'%$word%\' OR col_name2 LIKE \'%$word%\' OR col_name3 LIKE \'%$word%\' и т.д.
-
tarya , если тебе кто скажет что поиск по форуму это классная вещь -- не верь! Поиск не для этого предназначен:)
http://forums.webscript.ru/search.php?s=&action=showresults&searchid=19596&sortby=lastpost&sortorder=descending
-
Да, да. Я тож хотел на поиск отправить, тока сам не нашёл то что хотел. А хотел вот это
http://forums.webscript.ru/showthread.php?s=&threadid=6876
-
тут еще такой вопрос если возможно, как так делается что вместе с найденым словом у меня бы была выборка еще так пару тройку слов что было перед и после найденного слова, чтоб получилось примерно как на обычных поисковиках - набрал запрос, кратко прочитал, тыкнул ссылку и Ура?
как быть, может почитать есть что?
-
SUBSTR
-
следуя тематике форума, я бы сказал
LOCATE
SUBSTRING
SUBSTRING_INDEX
-
LOCATE
SUBSTRING
SUBSTRING_INDEX
как это применять? помогите пожалуста, обещяю купить нигу по SQL
-
найти позицию, в которой встречается данное слово.
отсчитать от нее 50 знаков взад
отсчитать от нее 50 знаков вперед.
вырезать из поля подстроку с этим значением.
SQL тут не при чем, это банальное программирование, в школе проходят.
Но в общем-то, вариант Александра, когда запрашивается целиком поле, а вырезка производится скриптом, наверное, попроще будет. Если только статьи не большие.
Тем более, что еще наверное LEAST придется использовать.
tarya, как ты думаешь, сколько времени у меня занимает посмотреть, что какая функция делает?
три секунды. Чего и тебе желаю.
-
не, не могу пока такого наворотить, "SUBSTRING" как этим пользоваться знаю а на другие функции никак не знаю, нучно чтоото почитать, а нечего :( вот жаль, я даже незнаю как определить месторасположение слова того :(
спасибо за помощь
-
что-то, которое нужно почитать, находится по адресу
http://www.mysql.com
-
Но в общем-то, вариант Александра, когда запрашивается целиком поле, а вырезка производится скриптом, наверное, попроще будет.
Оплошал малость. Я имел в виду SQL\'евский SUBSTRING.
я даже незнаю как определить месторасположение слова того
Вот решение:
SELECT *,
MID(detail,LOCATE(\'$word\', your_field)-20, 30)
FROM your_table WHERE your_field LIKE \'$word\';
-
$query = "SELECT * MID (detail , LOCATE(\'$find\', data) -20, 30) FROM u_find WHERE data LIKE \'$find\'";
вот такой запрос по сути дела получился, но он не верен, пишет Ошибку :(
как жаль
-
tarya
и какую ошибку оно пишет?
-
запятую, однако, надо между * и МИД
-
единственно что, я не понял, МИД берется от поля детайлс, а файнд локейтится в поле дата
-
SELECT * MID
где запятая.
detail , LOCATE(\'$find\', data
detail и data - должно быть одно поле.
[OFF]Сори я впарился в своём примере[/OFF]
Однако, это уже скорее логическая ошибка.
-
доброе утро.
я подправил строку запроса, получилось
$query = "SELECT * , MID (data , LOCATE(\'$find\', data) -20, 30) FROM u_find WHERE data LIKE \'$find\'";
где "data" это поле в таблице u_find где производится поиск $find - выдает вот такую ошибку: You have an error in your SQL syntax near \'(data , LOCATE(\'Василий\', data) -20, 30) FROM u_find WHERE data LIKE \'Василий\'\' at line 1
-
MID (data
Пробел убери
MID(data
-
И купи наконец книжку по мускулю.
:)
-
теперь все таки я пойду и куплю книгу по базе, так как все зароботало без ошибок, только ничего теперь н енаходит, даже если есть то слово хоть ты тресни.
-
а ты ищешь русские слова или англицкие?
полностью слово или содержащее часть?
-
я всякие перепробовал, все все варианты, и русские и английские и кусками и целиком - ничего
-
даже если есть то слово хоть ты тресни.
Тебе надо искать подстроку:
$query = "SELECT * , MID (data , LOCATE(\'$find\', data) -20, 30) FROM u_find WHERE data LIKE \'%$find%\'";
-
код у меня такой (тестовый)
if (isset ($submit_f))
{
connect ();
$query = "SELECT * , MID(data , LOCATE(\'$find\', data) -20, 30) FROM u_find WHERE data LIKE \'$find\'";
$result = mysql_query ($query) or die(mysql_error());
$num = mysql_num_rows ($result);
if ($num > \'0\')
{
print "";
while ($row = mysql_fetch_array($result)) :
$link = $row["link"];
$word = $row["data"];
print " $find |
$word |
";
endwhile;
print "
";
}
else
{
print "ничего не найдено";
}
}
-
а просто
SELECT * FROM u_find WHERE data LIKE \'$find\'
находит что-нибудь?
а в PHPmyAdmin ты не можешь запрос выполнять?
-
извинните что мучаю вас так сильно, но теперь результат тотже что и при старом запросе:
SELECT * FROM u_find WHERE data LIKE \'%$find%\'
какая разница от $query = "SELECT * , MID(data , LOCATE(\'$find\', data) -20, 30) FROM u_find WHERE data LIKE \'%$find%\'";
??
если в итоге выводится все тоже.
короче без книги я наверное не разбурусь
-
Сделай так:
$query = "SELECT MID(data , LOCATE(\'$find\', data) -20, 30) FROM u_find WHERE data LIKE \'%$find%\'";
-
короче говоря, очень прошу закрыть тему, я сильно запутался и вас заколебал уже наверное, все равно я ни чего не врублюсь, на слупую втовляя то что вы пишите а это неправильно.
спасибо всем
-
таря, на самом деле ты сделал все ДО конца, а теперь хочешь повернуть обратно.
проблема совсем небольшая.
запросы надо отлаживать не в скрипте, а в mysql
вот если бы ты делал этот запрос в консоли или в phpmyadmin, то вопроса бы просто не возникло..
А проблема твоя примитивная.
У тебя запрошенный текст находится в
MID(data , LOCATE(\'$find\', data) -20, 30)
а ты на экран выводишь
$word
надо писать
MID(data , LOCATE(\'$find\', data) -20, 30) AS pole
и вот это поле уже выводить
-
чесно сказать я думал вы меня вот уже и материть начнете :(, скажете -"заколебал"
то что ты написал все зароботало, спасибо вам большое очень, это очень мне все пригодится я верю, так как я хочу сделать поиск по сайту. обещаю на днях купить книгу и еще и разобраться немногоо более.
спасибо большое всем кто помог, на первый парах все работает, вот потом почитаю еще все в книге и разберусь как сделать чтоб похожии слова тоже отыскивало.
-
чтобы похожие слова отыскивать - книги мало.
Ты знаешь, для некоторых дел в этом мире надо 5 лет в институте учиться.
Странный народ эти веб-заказчики.
почему-то к вчерашнему школьнику, возомнившему себя хирургом, никто не торопится под нож ложиться.
А под веб писать - пожалуйста...
-
к RomikChef.
знаешь я ни когда не учился :(, как то так жил галимо, ни когда даже не мог толком по математике чтото сложить, 2 была годовая. дерьмо я был, и всякой гадостью страдал.
потом в 15 я уверовал, ... и вся жизнь моя изменилась на 100% и я стал учиться, учиться как мог. а вот в школе сделали все возможное чтобы я возненавидел на всю оставшуюся жизнь обучение.
мне не кто не чего не заказывал из веб и в этом я не нуждаюсь, просто хочу сделать приятное для тех кто этим пользуется.
спасибо тем кто на форуме этом в чем то может помочь и не берет за это ни чего, им и прийдет благословение, мерою полною, утресеною.
спасибо всем кто помог, верю вы не обеднели от помощи этой.