Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск в базе
 
 автор: Dazzl   (10.07.2011 в 15:43)   письмо автору
 
 

Люди как объявить поиск в столбце или в строке в базе?

  Ответить  
 
 автор: cheops   (10.07.2011 в 15:49)   письмо автору
 
   для: Dazzl   (10.07.2011 в 15:43)
 

Под "объявлением" что имеется в виду? Что в конечном итоге сделать хотите?

  Ответить  
 
 автор: Dazzl   (10.07.2011 в 16:03)   письмо автору
 
   для: cheops   (10.07.2011 в 15:49)
 

хочу узнать как искать что-либо в базе а точнее в строке или в столбце какой код это делает как и т.д. ))

  Ответить  
 
 автор: cheops   (10.07.2011 в 16:15)   письмо автору
 
   для: Dazzl   (10.07.2011 в 16:03)
 

Обычно это осуществляется средствами базы данных. Вы составляете запрос, база данных возвращает ответ. Специально настраивать столбцы нужно только в одном случае, если вы прибегаете к полнотекстовому поиску. Возможно вас заинтересуют следующие темы
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=514
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=807

  Ответить  
 
 автор: Dazzl   (10.07.2011 в 16:46)   письмо автору
 
   для: cheops   (10.07.2011 в 16:15)
 

Хорошо, а тогда подскажите как узнать на какой строке находиться то или иное слово?

  Ответить  
 
 автор: cheops   (10.07.2011 в 16:50)   письмо автору
 
   для: Dazzl   (10.07.2011 в 16:46)
 

Под строкой что имеется в виду? Запись в таблице? Она имеет уникальный идентификатор? Какова структура таблицы? Т.е. как называется столбец, в котором находится искомое слово?

  Ответить  
 
 автор: Dazzl   (10.07.2011 в 16:56)   письмо автору
 
   для: cheops   (10.07.2011 в 16:50)
 

Столбец называется name в нем записаны имена. нужно чтобы по запросу он проверил на какой строке это имя и есть ли оно

  Ответить  
 
 автор: cheops   (10.07.2011 в 17:03)   письмо автору
 
   для: Dazzl   (10.07.2011 в 16:56)
 

В простейшем случае запрос может выглядеть так
SELECT * FROM tbl WHERE name LIKE '%искомое_слово%'

  Ответить  
 
 автор: Dazzl   (10.07.2011 в 17:11)   письмо автору
 
   для: cheops   (10.07.2011 в 17:03)
 

это так надо записать $number = mysql_query("SELECT * FROM table WHERE `name` LIKE 'word'");

  Ответить  
 
 автор: cheops   (10.07.2011 в 17:13)   письмо автору
 
   для: Dazzl   (10.07.2011 в 17:11)
 

Да, только, если в строке name есть что-то отличное от word, нужно добавить символы %
SELECT * FROM table
WHERE `name` LIKE '%word%'

  Ответить  
 
 автор: Dazzl   (10.07.2011 в 17:18)   письмо автору
 
   для: cheops   (10.07.2011 в 17:13)
 

А что эта команда делает собственно? у меня через print он выводит Resource id #5 причём во всех случаях, будь то слово на 9 строке или на 1

  Ответить  
 
 автор: cheops   (10.07.2011 в 17:56)   письмо автору
 
   для: Dazzl   (10.07.2011 в 17:18)
 

mysql_query() не возвращает результат, она возвращает дескриптор результирующей таблицы (или false, если произошла ошибка выполнения запроса), получить доступ к которым вы можете при помощи набора функций.
<?php
   
...
  
$query "...";
  
$res mysql_query($query);
  if(!
$res) exit("Ошибка выполнения запроса - ".mysql_query());
  
$result mysql_fetch_array($res);
  echo 
"<pre>";
  
print_r($result);
  echo 
"</pre>";
  ...
?>
PS Если извлечение данных из MySQL вызывает сложности, лучше сначала отработать его на небольшом проекте-примере, а потом уже браться за поиск.

  Ответить  
 
 автор: Valick   (10.07.2011 в 21:43)   письмо автору
 
   для: Dazzl   (10.07.2011 в 16:56)
 

надеюсь имена не через запятую?
если так то условие WHERE name='имя'
SELECT * FROM tbl WHERE name='имя'

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 12:49)   письмо автору
 
   для: Valick   (10.07.2011 в 21:43)
 

Да, у меня уже есть пример и база и все есть и подключился я к ней всё вроде работает могу вводить выводить данные осталось тока научиться организовывать поиск, я немного вас не пойму наверное потому-что вы меня не понимаете.

вот примерно у мя такая база

| id | name | message | city |
| 1 | Иван | привет всем | Москва |
...
| 9 | Стас | привет всем | Киев |

Столбец id у меня работает автоинкрементном. Вот мне надо в нужный мне момент обратиться к строке (допустим) Статаса, и по желанию вытаскивать какие-либо данные, ну как данные вытаскивать я знаю, я хочу узнать как обратиться к строке учитываю что данные во все базе будут менять каждую минуту, а то и 10 сек как это сделать? если это слишком ёмкий вопрос киньте ссылку на подобную статью я просто не могу найти.

  Ответить  
 
 автор: cheops   (11.07.2011 в 12:58)   письмо автору
 
   для: Dazzl   (11.07.2011 в 12:49)
 

Так и обращайтесь, составляя соответствующее WHERE-условие
SELECT * FROM tbl WHERE name='Стас'
лучше, конечно, если есть возможность по id - он уникальный и быстрее обрабатывается, чем строка
SELECT * FROM tbl WHERE id=9

  Ответить  
 
 автор: Valick   (11.07.2011 в 15:04)   письмо автору
 
   для: Dazzl   (11.07.2011 в 12:49)
 

это у Вас чат?

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 17:04)   письмо автору
 
   для: Valick   (11.07.2011 в 15:04)
 

Не пойму я, вот посмотрите на этот код

$rer = mysql_query( " SELECT * FROM table1 WHERE name=' Стас ' " );

что будет в переменной $rer?

при выводе он показывает Resource id #5

  Ответить  
 
 автор: Valick   (11.07.2011 в 17:10)   письмо автору
 
   для: Dazzl   (11.07.2011 в 17:04)
 

Вам же уже Игорь Вячеславович написал, что такое ресурс

$res = mysql_query( " SELECT * FROM table1 WHERE name=' Стас ' " );
if(!$res) exit("Ошибка выполнения запроса - ".mysql_query()); 
  while($result = mysql_fetch_array($res)){
     echo $result [имя выводимого поля];
   }

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 17:16)   письмо автору
 
   для: Valick   (11.07.2011 в 17:10)
 

и что должно происходить, у меня 0 реакции

  Ответить  
 
 автор: Valick   (11.07.2011 в 17:17)   письмо автору
 
   для: Dazzl   (11.07.2011 в 17:16)
 

покажите код полностью

  Ответить  
 
 автор: cheops   (11.07.2011 в 19:56)   письмо автору
 
   для: Dazzl   (11.07.2011 в 17:16)
 

В этом коде нужно подставить название свое столбца, начните с такого
<?php
...
$res mysql_query" SELECT * FROM table1 WHERE name=' Стас ' " ); 
if(!
$res) exit("Ошибка выполнения запроса - ".mysql_query());  
if(
mysql_num_rows($res))
{
  while(
$result mysql_fetch_array($res)){ 
     echo 
$result ['name']."<br>"
     echo 
"<pre>";
     
print_r($result);
     echo 
"</pre>";
   }
}
...
?>

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 17:13)   письмо автору
 
   для: Valick   (11.07.2011 в 15:04)
 

нет не чат. я научиться выбирать данные из базы и но не знаю как определять строку

  Ответить  
 
 автор: Valick   (11.07.2011 в 17:16)   письмо автору
 
   для: Dazzl   (11.07.2011 в 17:13)
 

как обратиться к строке учитываю что данные во все базе будут менять каждую минуту, а то и 10 сек
тогда как Вы это объясните?
да и по всему видно выборку Вы путаете с чем-то другим
выбирать Вы как раз еще не научились (точнее обрабатывать результат запроса)

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 17:17)   письмо автору
 
   для: Valick   (11.07.2011 в 17:16)
 

...(тогда посоветуйте что-нить)...

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 21:31)   письмо автору
 
   для: Dazzl   (11.07.2011 в 17:17)
 

Спасибо всем за терпеливую помощь я наконец понял как выводить данные строки
Тока ещё несколько вопросов:
что делаю знаки процентов %Стас%?

$g = mysql_query("SELECT * FROM q WHERE `name` LIKE '%Стас%'");

и насколько быстрее обробатываеться данные если ссылаться как вы сказали на id?

лучше, конечно, если есть возможность по id - он уникальный и быстрее обрабатывается, чем строка
SELECT * FROM tbl WHERE id=9

  Ответить  
 
 автор: Valick   (11.07.2011 в 21:40)   письмо автору
 
   для: Dazzl   (11.07.2011 в 21:31)
 

тип поля id - integer числа всегда обрабатываются быстрее
сама по себе выборка по id довольно редкое явление (обычно это какой либо параметр передаваемый вместе со сылкой)
этой выборке чаще всего предшествует какая либо другая выборка результатом которой является один или несколько id (кстати формирование ссылки о которой речь шла чуть выше один из вариантов)

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 21:45)   письмо автору
 
   для: Valick   (11.07.2011 в 21:40)
 

Существенно ли повыситься производительность базы если ссылаться на id в базе с 10.000т. (а то и больше) строками?

  Ответить  
 
 автор: cheops   (11.07.2011 в 21:50)   письмо автору
 
   для: Dazzl   (11.07.2011 в 21:45)
 

Понимаете какая штука, когда речь заходит о больших таблицах - там все медленно работает, поэтому вводят индексирование, т.е. грубо говоря копию столбца, которая поддерживается в отсортированном состоянии, и которая ссылается на адрес в таблице. Такие индексы могут существенно увеличивать скорость. Можно индексировать и строки и числа, но строки всегда будут обрабатываться медленнее, так как они занимают больший размер - строка - это массив чисел. Что проще обработать 1 число или скажем 20?

  Ответить  
 
 автор: cheops   (11.07.2011 в 21:47)   письмо автору
 
   для: Dazzl   (11.07.2011 в 21:31)
 

% - это обозначения любого символа, т.е. ищется вхождение слова "Стас", до и после которого может быть произвольное количество слов.

>и насколько быстрее обробатываеться данные если ссылаться как вы сказали на id?
Обычное целое число занимает 2 байта, т.е. при сравнении цифр компьютеру нужно сравнить 2 байта с другими двумя байтами, делается это за один такт процессора. При сравнении строк нужно сравнить то количество байт, сколько символов в строке (это если кодировка однобайтовая) + плюс такты на обслуживание разбиения строки на сегменты, причем сравнивать сразу 4 байта (32 бита) не получится, нужно выделять каждый байт (8 бит), упаковывать в 32-битный фрагмент и скармливать процессору. Когда же вы используете %, мало того, что строки нужно сравнить, так их нужно сравнить начиная с каждого символа в строке, где осуществляется поиск... Если кратко, то цифры обрабатываются существенно быстрее, в разы, иногда даже на порядки быстрее.

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 21:50)   письмо автору
 
   для: cheops   (11.07.2011 в 21:47)
 

Спасибо ещё раз, я многое узнал с тех пор как наткнулся на ваш форум.

  Ответить  
 
 автор: Valick   (11.07.2011 в 22:07)   письмо автору
 
   для: Dazzl   (11.07.2011 в 21:50)
 

кстати Вы зря восприняли в штыки мой совет о приобретении хорошей книги
форум не сможет (по крайней мере это достаточно сложно) научить Вас задавать "правильные" вопросы, а вот книга сможет, и сделает это достаточно быстро.
более того мне лично с того купите ли Вы книгу или нет никакой выгоды и не будет
А вот авторы этого форума написали много хороших книг (большинство из которых у меня кстати стоят на полке) и поверьте любая из них стоит своих денег. Лично я , да и добрая половина форумцев, неоднократно благодарили авторов именно за книги, ну и естественно за форум, который является логическим продолжением книг.

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 22:04)   письмо автору
 
   для: cheops   (11.07.2011 в 21:47)
 

ещё вопрос

есть ли разница между
SELECT * FROM q WHERE `id` LIKE '4'"
такой выборкой данных (посредством id)

и такой

SELECT * FROM tbl WHERE id=9

Повторюсь мне нужно чтоб моя база работала как можно производительнее, так что указывайте на любую мелоч

  Ответить  
 
 автор: Dazzl   (11.07.2011 в 22:05)   письмо автору
 
   для: Dazzl   (11.07.2011 в 22:04)
 

q и tbl это одна база, забыл переименовать

  Ответить  
 
 автор: cheops   (11.07.2011 в 22:15)   письмо автору
 
   для: Dazzl   (11.07.2011 в 22:04)
 

Да есть, первый запрос будет приводить id к строке, а потом сравнивать однобайтовые строки, второй запрос просто без затей будет сравнивать числа. Лучше использовать второй запрос.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования