|
|
|
| Люди как объявить поиск в столбце или в строке в базе? | |
|
|
|
|
|
|
|
для: Dazzl
(10.07.2011 в 15:43)
| | Под "объявлением" что имеется в виду? Что в конечном итоге сделать хотите? | |
|
|
|
|
|
|
|
для: cheops
(10.07.2011 в 15:49)
| | хочу узнать как искать что-либо в базе а точнее в строке или в столбце какой код это делает как и т.д. )) | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: cheops
(10.07.2011 в 16:15)
| | Хорошо, а тогда подскажите как узнать на какой строке находиться то или иное слово? | |
|
|
|
|
|
|
|
для: Dazzl
(10.07.2011 в 16:46)
| | Под строкой что имеется в виду? Запись в таблице? Она имеет уникальный идентификатор? Какова структура таблицы? Т.е. как называется столбец, в котором находится искомое слово? | |
|
|
|
|
|
|
|
для: cheops
(10.07.2011 в 16:50)
| | Столбец называется name в нем записаны имена. нужно чтобы по запросу он проверил на какой строке это имя и есть ли оно | |
|
|
|
|
|
|
|
для: Dazzl
(10.07.2011 в 16:56)
| | В простейшем случае запрос может выглядеть так
SELECT * FROM tbl WHERE name LIKE '%искомое_слово%'
|
| |
|
|
|
|
|
|
|
для: cheops
(10.07.2011 в 17:03)
| | это так надо записать $number = mysql_query("SELECT * FROM table WHERE `name` LIKE 'word'"); | |
|
|
|
|
|
|
|
для: Dazzl
(10.07.2011 в 17:11)
| | Да, только, если в строке name есть что-то отличное от word, нужно добавить символы %
SELECT * FROM table
WHERE `name` LIKE '%word%'
|
| |
|
|
|
|
|
|
|
для: cheops
(10.07.2011 в 17:13)
| | А что эта команда делает собственно? у меня через print он выводит Resource id #5 причём во всех случаях, будь то слово на 9 строке или на 1 | |
|
|
|
|
|
|
|
для: 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 вызывает сложности, лучше сначала отработать его на небольшом проекте-примере, а потом уже браться за поиск. | |
|
|
|
|
|
|
|
для: Dazzl
(10.07.2011 в 16:56)
| | надеюсь имена не через запятую?
если так то условие WHERE name='имя'
SELECT * FROM tbl WHERE name='имя'
|
| |
|
|
|
|
|
|
|
для: Valick
(10.07.2011 в 21:43)
| | Да, у меня уже есть пример и база и все есть и подключился я к ней всё вроде работает могу вводить выводить данные осталось тока научиться организовывать поиск, я немного вас не пойму наверное потому-что вы меня не понимаете.
вот примерно у мя такая база
| id | name | message | city |
| 1 | Иван | привет всем | Москва |
...
| 9 | Стас | привет всем | Киев |
Столбец id у меня работает автоинкрементном. Вот мне надо в нужный мне момент обратиться к строке (допустим) Статаса, и по желанию вытаскивать какие-либо данные, ну как данные вытаскивать я знаю, я хочу узнать как обратиться к строке учитываю что данные во все базе будут менять каждую минуту, а то и 10 сек как это сделать? если это слишком ёмкий вопрос киньте ссылку на подобную статью я просто не могу найти. | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 12:49)
| | Так и обращайтесь, составляя соответствующее WHERE-условие
SELECT * FROM tbl WHERE name='Стас'
| лучше, конечно, если есть возможность по id - он уникальный и быстрее обрабатывается, чем строка
SELECT * FROM tbl WHERE id=9
|
| |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 12:49)
| | это у Вас чат? | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 15:04)
| | Не пойму я, вот посмотрите на этот код
$rer = mysql_query( " SELECT * FROM table1 WHERE name=' Стас ' " );
что будет в переменной $rer?
при выводе он показывает Resource id #5 | |
|
|
|
|
|
|
|
для: 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 [имя выводимого поля];
}
|
| |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 17:10)
| | и что должно происходить, у меня 0 реакции | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 17:16)
| | покажите код полностью | |
|
|
|
|
|
|
|
для: 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>";
}
}
...
?>
|
| |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 15:04)
| | нет не чат. я научиться выбирать данные из базы и но не знаю как определять строку | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 17:13)
| | как обратиться к строке учитываю что данные во все базе будут менять каждую минуту, а то и 10 сек
тогда как Вы это объясните?
да и по всему видно выборку Вы путаете с чем-то другим
выбирать Вы как раз еще не научились (точнее обрабатывать результат запроса) | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 17:16)
| | ...(тогда посоветуйте что-нить)... | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 17:17)
| | Спасибо всем за терпеливую помощь я наконец понял как выводить данные строки
Тока ещё несколько вопросов:
что делаю знаки процентов %Стас%?
$g = mysql_query("SELECT * FROM q WHERE `name` LIKE '%Стас%'");
и насколько быстрее обробатываеться данные если ссылаться как вы сказали на id?
лучше, конечно, если есть возможность по id - он уникальный и быстрее обрабатывается, чем строка
SELECT * FROM tbl WHERE id=9 | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 21:31)
| | тип поля id - integer числа всегда обрабатываются быстрее
сама по себе выборка по id довольно редкое явление (обычно это какой либо параметр передаваемый вместе со сылкой)
этой выборке чаще всего предшествует какая либо другая выборка результатом которой является один или несколько id (кстати формирование ссылки о которой речь шла чуть выше один из вариантов) | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 21:40)
| | Существенно ли повыситься производительность базы если ссылаться на id в базе с 10.000т. (а то и больше) строками? | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 21:45)
| | Понимаете какая штука, когда речь заходит о больших таблицах - там все медленно работает, поэтому вводят индексирование, т.е. грубо говоря копию столбца, которая поддерживается в отсортированном состоянии, и которая ссылается на адрес в таблице. Такие индексы могут существенно увеличивать скорость. Можно индексировать и строки и числа, но строки всегда будут обрабатываться медленнее, так как они занимают больший размер - строка - это массив чисел. Что проще обработать 1 число или скажем 20? | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 21:31)
| | % - это обозначения любого символа, т.е. ищется вхождение слова "Стас", до и после которого может быть произвольное количество слов.
>и насколько быстрее обробатываеться данные если ссылаться как вы сказали на id?
Обычное целое число занимает 2 байта, т.е. при сравнении цифр компьютеру нужно сравнить 2 байта с другими двумя байтами, делается это за один такт процессора. При сравнении строк нужно сравнить то количество байт, сколько символов в строке (это если кодировка однобайтовая) + плюс такты на обслуживание разбиения строки на сегменты, причем сравнивать сразу 4 байта (32 бита) не получится, нужно выделять каждый байт (8 бит), упаковывать в 32-битный фрагмент и скармливать процессору. Когда же вы используете %, мало того, что строки нужно сравнить, так их нужно сравнить начиная с каждого символа в строке, где осуществляется поиск... Если кратко, то цифры обрабатываются существенно быстрее, в разы, иногда даже на порядки быстрее. | |
|
|
|
|
|
|
|
для: cheops
(11.07.2011 в 21:47)
| | Спасибо ещё раз, я многое узнал с тех пор как наткнулся на ваш форум. | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 21:50)
| | кстати Вы зря восприняли в штыки мой совет о приобретении хорошей книги
форум не сможет (по крайней мере это достаточно сложно) научить Вас задавать "правильные" вопросы, а вот книга сможет, и сделает это достаточно быстро.
более того мне лично с того купите ли Вы книгу или нет никакой выгоды и не будет
А вот авторы этого форума написали много хороших книг (большинство из которых у меня кстати стоят на полке) и поверьте любая из них стоит своих денег. Лично я , да и добрая половина форумцев, неоднократно благодарили авторов именно за книги, ну и естественно за форум, который является логическим продолжением книг. | |
|
|
|
|
|
|
|
для: 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:04)
| | q и tbl это одна база, забыл переименовать | |
|
|
|
|
|
|
|
для: Dazzl
(11.07.2011 в 22:04)
| | Да есть, первый запрос будет приводить id к строке, а потом сравнивать однобайтовые строки, второй запрос просто без затей будет сравнивать числа. Лучше использовать второй запрос. | |
|
|
|