[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как делать поиск
Rachel
Привет) Мне интересно, по какому алгоритму осуществляется поиск. например,как в гугле,мне нужно поиск не по сайту, а из базы данных. Какие есть для этого средства?



Спустя 6 минут, 19 секунд (23.02.2009 - 21:29) jetistyum написал(а):
есть средства SQL
например SELECT **** FROM **** WHERE *** = 'blablabla'
или
_______________________________________ LIKE '%blablabla%'
ну .. и остальное почитай smile.gif

Спустя 16 дней, 21 час, 55 минут, 35 секунд (10.03.2009 - 19:24) freed-master написал(а):
А как сделать так чтоб искал по всем таблицам БД во всех полях?

Код
mysql_query("SELECT DISTINCT * FROM "?" WHERE "?", $sql)

Спустя 23 часа, 26 минут, 58 секунд (11.03.2009 - 18:51) freed-master написал(а):
Код
mysql_query("SELECT * FROM wares WHERE `description`='".$query."'", $sql) or die ("Ошибка запроса: " . mysql_error());
Почему wares распознается как таблица а не как БД, вернее что написать чтоб распознавал как БД?

Спустя 1 час, 49 минут, 24 секунды (11.03.2009 - 20:40) freed-master написал(а):
Неужели опять все на столько элементарно и все решили, что я уже справился? - вынужден вас огорчить (или не очень) - я НЕ справился!

Спустя 4 минуты, 47 секунд (11.03.2009 - 20:45) twin написал(а):
Нет, как раз наоборот. На столько все абстрактно, что нет слов. Одним простым запросом, да чтоб во всех полях, да во всей базе... Эт Вы, батенька, хватили. Тут нужно скрипт, несколько запросов или один ооочень сложный.

Спустя 3 минуты, 36 секунд (11.03.2009 - 20:49) freed-master написал(а):
ок, буду думать в другом направлении...

Спустя 2 минуты, 38 секунд (11.03.2009 - 20:52) sergeiss написал(а):
Цитата (freed-master @ 11.03.2009 - 18:51)
Код
mysql_query("SELECT * FROM wares WHERE `description`='".$query."'", $sql) or die ("Ошибка запроса: " . mysql_error());
Почему wares распознается как таблица а не как БД, вернее что написать чтоб распознавал как БД?

Это потому, что в синтаксисе запроса тут подразумевается таблица, а не БД. И
ты не можешь тут указать БД, ни при каких условиях.
Ежели по всем таблицам надо поиск, то делай по каждой в отдельности.
Да и определись, что же именно ты хочешь найти. Какие поля, какие условия, и т.д. и т.п.

PS. twin опередил немного smile.gif

Но автору темы лучше бы описать задачу, которую он хочет сделать. Может быть, она решается не так уж и сложно, но не так, как он думал.

Спустя 4 минуты, 13 секунд (11.03.2009 - 20:56) freed-master написал(а):
А как тогда понимать строки из темы:
Код
// Заносим в переменную <I>$result</I> всю базу
$sql="select * from Izdanie";
$result=mysql_query($sql);

Спустя 6 минут, 51 секунда (11.03.2009 - 21:03) sergeiss написал(а):
"Если на клетке со львом написано 'тигр' - не верь глазам своим" (С) smile.gif

Эта фраза, которую ты процитировал - неправильная. Мы не заносим в переменную $result "всю базу". Тут создается указатель на выбранные данные из таблицы, в данном случае из таблицы Izdnie. Не более того.
Уже далее, используя этот указатель, можно перебрать все выбранные строки.

Так что именно ты хочешь сделать???

PS. Да и вообще в том "примере" обработка выбранных данных делается через "сидячее место" smile.gif

Спустя 10 минут, 9 секунд (11.03.2009 - 21:13) freed-master написал(а):
Цитата
Так что именно ты хочешь сделать???
Как не странно, хочу сделать скрипт поиска в mySQL по четырем полям всех таблиц одной БД (поля в таблицах одинаковые)

Ну написать у меня сейчас врядли получется, а вот подогнать под себя уже готовый можно попробовать. К стати вот нашел что-то похожее: Безопасный и удобный поиск в mySQL Попробую разобраться.

Спустя 9 минут, 2 секунды (11.03.2009 - 21:22) sergeiss написал(а):
Ежели поля в таблицах одинаковые, и количество их известно, то тогда МОЖНО сделать поиск. Элементарно smile.gif Если надо - скажу как.

Правда, мне непонятно, зачем делать много таблиц с одинаковой структурой?????

Спустя 1 час, 10 минут, 30 секунд (11.03.2009 - 22:32) freed-master написал(а):
Каждая таблица содержит товары одного вида, а видов много. Конечно можно было сделать все в одну, а при выводе как-нибудь фильтровать (например по префиксу). Но когда, недели две назад, я начинал делать этот каталог, я первый раз в жизни начал использовать и изучать БД. Когда еще ничего не знаешь трудно предусмотреть все детали, а теперь переделывать не охота.

Спустя 34 минуты, 45 секунд (11.03.2009 - 23:07) sergeiss написал(а):
Знаешь, что я тебе скажу насчет "неохота"... Ты можешь сделать это объединение за несколько минут smile.gif
Иначе ты все равно придешь к необходимости этого действия. И его придется делать. Потом.

Значит, объясняю. И давай я тебе объясню сначала, как сделать объединение таблиц в одну. А потом ты уже будешь делать поиск в одной, объединенной таблице.
Предположим, что у тебя таблица содержит поля f1, f2, f3.
Таблиц - N, с именами table_n, где n=1...N.

В новой таблице надо только добавить поле (назовем его id), которое будет идентифицировать один вид товара.
Таблица с именем table_0 - это итоговая, с полями id, f1, f2, f3 (ее надо будет создать заранее).

Тогда запрос
SQL
select cast (1 as integer) as id, * from table_1

выберет все данные из таблицы 1 и добавит к ним колонку целого типа, и назначит туда значение 1 (пока НЕ надо запускать этот запрос smile.gif).

Далее надо сделать запросы по каждой таблице, и объединить их все вместе в единую таблицу. Полученные данные надо записать в итоговую таблицу.

И вот такой запрос объединит все данные и запишет их сразу же в итоговую таблицу:

SQL
insert into table_0 values (
select cast( 1 as integer) as id, * from table_1 union
select cast( 2 as integer) as id, * from table_2 union
select cast( 3 as integer) as id, * from table_2 union
...
select cast( N as integer) as id, * from table_N )

Здесь N - это реальное число, которое надо написать вместо N.
После последнего select не надо union!!!

И я подразумеваю, что товарам из table_1 назначается индекс товара 1, и так для всех типов товаров. Это можно сделать и по-другому как-то.

И еще тут понадобится одна таблица, в которой будет прописано соответствие между номером (индексом товара) и его наименованием.

Спустя 1 день, 17 часов, 25 минут, 29 секунд (13.03.2009 - 16:32) freed-master написал(а):
Подготовил запрос со строками типа:
Код
select cast( 1 as integer) as id, * from business_desk_book union
select cast( 2 as integer) as id, * from business_desk_clock union
select cast( 3 as integer) as id, * from business_desk_globe union

Запросил. А он мне:
Код
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'integer) as id * from business_desk_book union LIMIT 0, 30' at line

Спустя 41 минута, 9 секунд (13.03.2009 - 17:14) sergeiss написал(а):
Вот в этом куске откуда union???
SQL
" from business_desk_book union LIMIT 0, 30"


union может быть только в самом конце, когда уже весь запрос сформирован. Т.е. после LIMIT!!!

И вообще. Покажи весь запрос, чтобы не гадать.

Спустя 19 минут (13.03.2009 - 17:33) freed-master написал(а):
Кое-что упустил, потом испраил, но результат не сильно отличается:
Код
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select cast( 1 as integer) as id, * from business_desk_book union
select cast( ' at line 2
Весь код запроса:
Код
insert into wares values (
select cast( 1 as integer) as id, * from business_desk_book union
select cast( 2 as integer) as id, * from business_desk_clock union
select cast( 3 as integer) as id, * from business_desk_globe union
select cast( 4 as integer) as id, * from business_desk_kit union
select cast( 5 as integer) as id, * from business_desk_stand union
select cast( 6 as integer) as id, * from business_desk_visitbox union
select cast( 7 as integer) as id, * from business_writing_pen union
select cast( 8 as integer) as id, * from business_writing_penleg union
select cast( 9 as integer) as id, * from wares_clean_alphabetic union
select cast( 10 as integer) as id, * from wares_clean_coverdoc union
select cast( 11 as integer) as id, * from wares_clean_datebook union
select cast( 12 as integer) as id, * from wares_clean_diploma union
select cast( 13 as integer) as id, * from wares_clean_gathering union
select cast( 14 as integer) as id, * from wares_clean_literacy union
select cast( 15 as integer) as id, * from wares_clean_planbook union
select cast( 16 as integer) as id, * from wares_clean_pocket-book union
select cast( 17 as integer) as id, * from wares_clean_visitbox union
select cast( 18 as integer) as id, * from wares_desk_calendar union
select cast( 19 as integer) as id, * from wares_desk_stand union
select cast( 20 as integer) as id, * from wares_gift_candle union
select cast( 21 as integer) as id, * from wares_gift_pact union
select cast( 22 as integer) as id, * from wares_gift_trinket union
select cast( 23 as integer) as id, * from wares_gift_wrapper union
select cast( 24 as integer) as id, * from wares_kids_bag union
select cast( 25 as integer) as id, * from wares_kids_brush union
select cast( 26 as integer) as id, * from wares_kids_carton union
select cast( 27 as integer) as id, * from wares_kids_chalk union
select cast( 28 as integer) as id, * from wares_kids_cover union
select cast( 29 as integer) as id, * from wares_kids_creative union
select cast( 30 as integer) as id, * from wares_kids_drawing_set union
select cast( 31 as integer) as id, * from wares_kids_gouache union
select cast( 32 as integer) as id, * from wares_kids_markpen union
select cast( 33 as integer) as id, * from wares_kids_paint union
select cast( 34 as integer) as id, * from wares_kids_palette union
select cast( 35 as integer) as id, * from wares_kids_paper_color union
select cast( 36 as integer) as id, * from wares_kids_pencilc union
select cast( 37 as integer) as id, * from wares_kids_pencilplast union
select cast( 38 as integer) as id, * from wares_kids_plasticine union
select cast( 39 as integer) as id, * from wares_kids_rubber union
select cast( 40 as integer) as id, * from wares_kids_ruler union
select cast( 41 as integer) as id, * from wares_kids_stack union
select cast( 42 as integer) as id, * from wares_kids_supplies union
select cast( 43 as integer) as id, * from wares_office_box union
select cast( 44 as integer) as id, * from wares_office_briefcase union
select cast( 45 as integer) as id, * from wares_office_calculator union
select cast( 46 as integer) as id, * from wares_office_clipbord union
select cast( 47 as integer) as id, * from wares_office_delimiter union
select cast( 48 as integer) as id, * from wares_office_docbox union
select cast( 49 as integer) as id, * from wares_office_erasable_board union
select cast( 50 as integer) as id, * from wares_office_flipchart union
select cast( 51 as integer) as id, * from wares_office_folder union
select cast( 52 as integer) as id, * from wares_office_looseleaf union
select cast( 53 as integer) as id, * from wares_office_registrar union
select cast( 54 as integer) as id, * from wares_office_tray union
select cast( 55 as integer) as id, * from wares_office_workflow union
select cast( 56 as integer) as id, * from wares_paper_a3 union
select cast( 57 as integer) as id, * from wares_paper_a4 union
select cast( 58 as integer) as id, * from wares_paper_copying union
select cast( 59 as integer) as id, * from wares_paper_drawing union
select cast( 60 as integer) as id, * from wares_paper_flipchart union
select cast( 61 as integer) as id, * from wares_paper_glassine union
select cast( 62 as integer) as id, * from wares_paper_note union
select cast( 63 as integer) as id, * from wares_paper_office union
select cast( 64 as integer) as id, * from wares_paper_whatman union
select cast( 65 as integer) as id, * from wares_stamp_accessory union
select cast( 66 as integer) as id, * from wares_truck_bodkin union
select cast( 67 as integer) as id, * from wares_truck_corrector union
select cast( 68 as integer) as id, * from wares_truck_cramp union
select cast( 69 as integer) as id, * from wares_truck_defasten union
select cast( 70 as integer) as id, * from wares_truck_dispenser union
select cast( 71 as integer) as id, * from wares_truck_elastic union
select cast( 72 as integer) as id, * from wares_truck_fasten union
select cast( 73 as integer) as id, * from wares_truck_file union
select cast( 74 as integer) as id, * from wares_truck_glue union
select cast( 75 as integer) as id, * from wares_truck_handle union
select cast( 76 as integer) as id, * from wares_truck_knife union
select cast( 77 as integer) as id, * from wares_truck_pin union
select cast( 78 as integer) as id, * from wares_truck_pricetag union
select cast( 79 as integer) as id, * from wares_truck_rubber union
select cast( 80 as integer) as id, * from wares_truck_rule union
select cast( 81 as integer) as id, * from wares_truck_scissors union
select cast( 82 as integer) as id, * from wares_truck_sharpener union
select cast( 83 as integer) as id, * from wares_truck_staple union
select cast( 84 as integer) as id, * from wares_writing_ink union
select cast( 85 as integer) as id, * from wares_writing_liner union
select cast( 86 as integer) as id, * from wares_writing_marker union
select cast( 87 as integer) as id, * from wares_writing_mech_oil union
select cast( 88 as integer) as id, * from wares_writing_mech_rolling union
select cast( 89 as integer) as id, * from wares_writing_pen_fountain union
select cast( 90 as integer) as id, * from wares_writing_pen_gel union
select cast( 91 as integer) as id, * from wares_writing_pen_kit union
select cast( 92 as integer) as id, * from wares_writing_pen_oil union
select cast( 93 as integer) as id, * from wares_writing_pen_paste union
select cast( 94 as integer) as id, * from wares_writing_pen_rolling union
select cast( 95 as integer) as id, * from wares_writing_pencilb union
select cast( 96 as integer) as id, * from wares_writing_roller)

Спустя 13 минут, 15 секунд (13.03.2009 - 17:46) sergeiss написал(а):
Ты знаешь чего... Я написал синтаксис так, как он в ПостГРе работает. Сейчас уточнил в справке, с мюзикле надо, вроде бы, немного по-другому писать:

Попробуй так (почти то же, что и раньше, только без слова values и без скобок):
SQL
insert into wares select ...тут весь список селектов, который у тебя сделан уже

Спустя 9 минут, 48 секунд (13.03.2009 - 17:56) freed-master написал(а):
Так что-ли:
Код
insert into wares select
select cast( 1 as integer) as id, * from business_desk_book union
...
select cast( 96 as integer) as id, * from wares_writing_roller
Все равно:
Код
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select cast( 1 as integer) as id, * from business_desk_book union
select cast( ' at line 2

Спустя 11 минут, 53 секунды (13.03.2009 - 18:08) sergeiss написал(а):
Одно слово select (в первой строке) лишнее!!!

Код
insert into wares
select cast( 1 as integer) as id, * from business_desk_book union
...
select cast( 96 as integer) as id, * from wares_writing_roller


Ну ёпрст, посмотри хэлп, что ли smile.gif

Спустя 16 минут, 59 секунд (13.03.2009 - 18:25) freed-master написал(а):
Те же яйца, только в профиль:
Код
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'integer) as id, * from business_desk_book union
select cast( 2 as integer) as i' at line 2

Спустя 4 часа, 56 секунд (13.03.2009 - 22:25) freed-master написал(а):
Методом проб и ошибок, средствами Дримвевера (найти и заменить все...) без особых трудностей заново создал и заполнил одну единственную таблицу. Буду двигаться дальше...

Спустя 12 минут, 8 секунд (13.03.2009 - 22:38) sergeiss написал(а):
Ну, сделал и хорошо smile.gif Тем более, что сам разобрался - это вообще идеально.

Но с этим запросом все-таки рекомендую разобраться, хотя бы в образовательных целях.

Спустя 1 час, 43 минуты, 22 секунды (14.03.2009 - 00:21) freed-master написал(а):
Теперь вот не хочет добовлять в табдицу новые товары.
Код
mysql_query("INSERT INTO `wares` WHERE `id`='".$section."' SET `code`='".$code."', `ware`='".$ware."', `description`='".$description."', `producer`='".$producer."', `price`='".$price."'", $sql) or die ("Ошибка запроса: " . mysql_error());

Спустя 13 часов, 34 минуты, 12 секунд (14.03.2009 - 13:55) freed-master написал(а):
А можно ли вообще использовать WHERE вместе с INSERT INTO?

Спустя 5 минут, 46 секунд (14.03.2009 - 14:01) freed-master написал(а):
Снова глупо провтыкал....
Код
mysql_query("INSERT INTO `wares` SET `id`='".$section."' `code`='".$code."', `ware`='".$ware."', `description`='".$description."', `producer`='".$producer."', `price`='".$price."'", $sql) or die ("Ошибка запроса: " . mysql_error());

Спустя 11 минут, 44 секунды (14.03.2009 - 14:13) freed-master написал(а):
Теперь все хорошо, вот только не хочет искать. Что не то:
Код
<?php
header("Content-Type: text/html; charset=utf-8");
include_once("admin/config.php");

if (isset($_POST['search'])) {
$query = isset($_POST['query'])?$_POST['query']:null;

$result = mysql_query("SELECT * FROM `wares` WHERE `ware`='".$query."'", $sql) or die ("Ошибка запроса: " . mysql_error());

while($row = mysql_fetch_assoc($result))
{
?>
<tr>
<td rowspan="2" id="img_ware">
<img src="images/<?php printf($row["code"]); ?>.jpg"></td>
<td colspan="2">
<h2><?php echo htmlspecialchars($row["ware"]); ?></h2>
<p><?php echo htmlspecialchars($row["description"]); ?></p>
<p><strong>Производитель:</strong> <?php echo htmlspecialchars($row["producer"]); ?></p>
<p><strong>Артикул:</strong> <?php echo htmlspecialchars($row["code"]); ?></p>
<p><strong>Цена:</strong> <?php
if ($row["price"] == 0) echo "Под заказ";
else printf("%01.2f", $row["price"]); ?></p>
</td>
</tr>
<tr>
<td align="right">
<form method="POST">
Примечание (цвет и т.п.): <input type="text" name="note" /><br  />
<input type="submit" name="submit" value="Добавить в корзину"/>
<input name="qty" type="text" id="txt" />
<input type="hidden" name="code" value="<?php echo htmlspecialchars($row["code"]); ?>"/>
<input type="hidden" name="ware" value="<?php echo htmlspecialchars($row["ware"]); ?>"/>
<input type="hidden" name="price" value="<?php echo htmlspecialchars($row["price"]); ?>"/>
</form>
</td>
<td id="add_space"></td>
</tr>
<?php
}}
?>
<form action="" method="post"><input name="query" type="text" /><input name="search" value="Найти" type="submit" /></form>


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.