|
|
|
| Здравствуйте.
Что лучше использовать в плане производительности функции php или функции mysql в случае, когда задачу можно решить двумя способами? Например, как лучше обрезать строку mysql-функцией SUBSTRING или php-функцией substr? | |
|
|
|
|
|
|
|
для: antf
(16.01.2012 в 00:44)
| | с связке с MySQL язык РНР нужно использовать по возможности только для вывода результатов выборки, весь функционал программы нужно перекладывать на плечи СУБД
грубо говоря при программировании с использованием MySQL нужно вообще забыть про РНР и учиться заново программировать
естественно функции MySQL быстрее | |
|
|
|
|
|
|
|
для: antf
(16.01.2012 в 00:44)
| | Вообще лучше, конечно, MySQL... только постарайтесь сократить выборку, чтобы SUBSTRING() применялся не ко всей таблице, т.е. исключить его из WHERE-конструкции, а то не известно как повернется на деле, может будет и в PHP проще отрезать. | |
|
|
|
|
|
|
|
для: cheops
(16.01.2012 в 01:26)
| | А можно с помощью mysql решить такую задачу? Если длина сообщения больше 300 символов, надо обрезать его и поставить в конце троеточие.
<?php
if(mb_strlen($message, 'utf-8') > 300)
$message = mb_substr($message, 0, 300, 'utf-8').'...';
?>
|
| |
|
|
|
|
|
|
|
для: antf
(16.01.2012 в 01:58)
| | Сам дошел, но громоздко.
SELECT fromu.fio as from_fio,
fromu.photo,
m.*,
IF(LENGTH(m.message) > 300, CONCAT(SUBSTRING(message, 1, 300),'...'), message) as message,
DATE_FORMAT(m.date, '%d %b %Y %H:%i') as date_frm
FROM {$gl_db_prefix}messages as m,
{$gl_db_prefix}users as fromu
WHERE m.to_id_user = {$id_user}
AND m.from_id_user = fromu.id_user
|
| |
|
|
|
|
автор: ..... (16.01.2012 в 05:21) |
|
|
для: antf
(16.01.2012 в 02:17)
| | примерно так по пробелу можно сделать
INSERT( m.message, (LOCATE(' ', m.message, 300)), -1
, ' ...<a href=".........">читать дальше</a>') AS message
| но иногда в данных переносы строк вместо пробелов | |
|
|
|
|
|
|
|
для: .....
(16.01.2012 в 05:21)
| | Если содержимое столбца descr превышает 300 символов, тогда описание проекта режется не посередине слова, а на пробеле. Причем этот пробел находится дальше указанной длины строки.
SELECT *,
IF(LENGTH(descr) > 300, CONCAT(SUBSTRING(descr, 1, IF(LOCATE(' ', descr, 300), LOCATE(' ', descr, 300) - 1, 300)),'...'), descr) as descr
FROM projects
ORDER BY date DESC";
|
Работает, но код забористый получается :) | |
|
|
|