Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поиск совпадений по части слова в бд без учёта пробелов...
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Поиск совпадений по части слова в бд без учёта пробелов...

Страниц (1): [1]
 

1. armancho7777777 - 10 Марта, 2012 - 05:57:24 - перейти к сообщению
Всем привет!
Реализую autocomplete.
Выполняется поиск по части слова:
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query("SELECT `name`, `data` FROM `table`
  3.               WHERE `name` LIKE '".mysql_real_escape_string($name)."%'");      
  4.  

А как осуществить тоже самое без учёта пробелов?
Т.е. пользователь ввёл например "терминатор3" а в БД есть запись "терминатор 3".
2. armancho7777777 - 10 Марта, 2012 - 10:17:11 - перейти к сообщению
И ещё, чтобы не создавать новую тему:
создал поле типа timestamp, но дата туда записывается в таком формате:
2012-03-10 17:11:22
и соответственно так и выводится.
Как это исправить?
3. EuGen - 11 Марта, 2012 - 16:05:48 - перейти к сообщению
armancho7777777
По поводу поиска:
Можно сделать таким запросом:
CODE (SQL):
скопировать код в буфер обмена
  1. "SELECT `name`, `data` FROM `table`
  2.              WHERE REPLACE(`name`, ' ', '') LIKE '".mysql_real_escape_string(str_replace(' ', '', $name))."%'"

По поводу даты:
"Исправить" имеется ввиду формат вывода?
http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]tion_date-format
4. armancho7777777 - 11 Марта, 2012 - 21:49:51 - перейти к сообщению
Спасибо EuGen!
EuGen пишет:
имеется ввиду формат вывода?

И запись тоже.
Разве в поле типа timestamp не должно записываться дата в таком виде 1331495516 ?
5. dadli - 11 Марта, 2012 - 22:06:49 - перейти к сообщению
armancho7777777


нет, timestamp формат такои же, какои для типа DATETIME
если хотите в том формате, котори ви сказали, сделаите поле типа INT и примерно такои запрос:
INSERT INTO tablica (vremia) VALUES(UNIX_TIMESTAMP())
6. armancho7777777 - 11 Марта, 2012 - 23:02:34 - перейти к сообщению
А в чём тогда разница между TIMESTAMP и DATETIME ?
7. dadli - 11 Марта, 2012 - 23:13:08 - перейти к сообщению
armancho7777777

в виде (в формате) практически нет разници.
для TIMESTAMP, можно установить текуши время по умалчаню, при вставке данних, для DATETIME нет. один TIMESTAMP запис занимает 4 баит, DATETIME 8.
и еше есть какои то рзаници.
8. OrmaJever - 12 Марта, 2012 - 02:01:17 - перейти к сообщению
armancho7777777 пишет:
А в чём тогда разница между TIMESTAMP и DATETIME ?

timestamp хранит метку времени в секундах сначала эпохи unix. доступные значения с 1970 года по 2037, а datatime хранит время можно сказать строкой, поэтому доступные значения гораздо больше.
(Добавление)
Да кстате ещё timestamp обновляется сам при добавлении даных в базу на текущее время (примерно как id autoincrement), а datatime установится в 0
9. armancho7777777 - 12 Марта, 2012 - 08:22:15 - перейти к сообщению
OrmaJever пишет:
timestamp хранит метку времени в секундах

Вот именно, что она хранит ни метку времени в секундах, а как и datetime в таком виде 2012-03-10 17:11:22
OrmaJever пишет:
timestamp обновляется сам при добавлении даных в базу на текущее время (примерно как id autoincrement), а datatime установится в 0

Да нет, вот именно, что оба поля работаю одинакого, оба автоматом добавляют дату в таком виде 2012-03-10 17:11:22
10. snikers987 - 12 Марта, 2012 - 08:31:33 - перейти к сообщению
armancho7777777 http://habrahabr[dot]ru/blogs/mysql/61391/
11. EuGen - 12 Марта, 2012 - 09:00:50 - перейти к сообщению
armancho7777777
Отличия, разумеется, есть. Как минимум в том, что TIMESTAMP спообен хранить (в силу того, что метка времени есть обычное 32-разрядное целое) дату только в пределах от 1970-01-01 00:00:00 до 2037-12-31 23:59:59 (для DATETIME же такой интервал буде куда как шире - от 1000-01-01 00:00:00 до 9999-12-31 23:59:59)
Логически, DATETIME - это абсолютная метка времени, тогда как TIMESTAMP - относительная.
Еще одно отличие в том, что по-умолчанию, начиная с MySQL 5-й версии, данные типа TIMESTAMP конвертируются из текущей временной зоны в UTC.
12. Мелкий - 12 Марта, 2012 - 09:16:21 - перейти к сообщению
EuGen пишет:
для DATETIME же такой интервал буде куда как шире - от 1000-01-01 00:00:00

Оп. Действительно, так в мане и написано. А успешно хранящийся и не выдающих никаких варнингов 0998-04-01 10:54:49 - это внештатная фича, получается? На версии 5.1 точно воспроизводится.
(Добавление)
armancho7777777 пишет:
Вот именно, что она хранит ни метку времени в секундах, а как и datetime в таком виде 2012-03-10 17:11:22

Хранит - метку. Выводит - обычный Y-m-d H:i:s
13. armancho7777777 - 13 Марта, 2012 - 08:26:11 - перейти к сообщению
Ясно)
Всем спасибо, кто ответил)

 

Powered by ExBB FM 1.0 RC1