Небольшие вопросы по PHP

Статус
В этой теме нельзя размещать новые ответы.

dimagolov

Новичок
LONGMAN, кол-во комментариев надо не считать при каждом запросе, а хранить в отдельном поле, например в таблице новостей, и обновлять при публикации комментария.
 

findnext

Новичок
LONGMAN, кол-во комментариев надо не считать при каждом запросе, а хранить в отдельном поле, например в таблице новостей, и обновлять при публикации комментария.
+ 1 + лучше это сделать с помощью триггера
 

LONGMAN

Dark Side of the Moon..
В моём запросе если тот юзер удален, на котором указывает `news`.`userID`, вообше не выбирается никакой запись, а я хочу что выбирался все записи, что бы потом место удалённого юзера просто выводить Guest или Anonimouse. Вазможен такой запрос?
 

dimagolov

Новичок
делается примерно так. FOREIGN KEY на таблицу пользователей с ON DELETE SET NULL, + триггер BEFORE UPDATE с кодом типа
PHP:
IF NEW.UserID IS NULL THEN
  SET NEW.UserID= 1; # Anonimouse user ID
END IF;
ну собственно и все. при удалении связанной записи из пользователей поле будет меняться на NULL, а при этом триггер будет ставить ее в нужное значение анонима. Как побочный эфект можно будет опускать поле UserID при создании записи, если пользователь не известен.
 

findnext

Новичок
LONGMAN
да, + когда будешь делать foreign key смотри чтобы ячейки были идентичны иначе получишь error 150
 

LONGMAN

Dark Side of the Moon..
Ясно. Спасибо всем :)

-~{}~ 25.03.09 18:53:

Господа, какую функцию лучше использовать для пойска в тексте, strpos(), substr_count(), strstr() или ещё какой нибудь? Моя цель узнать входит ли один кусок строки в другом. Если входит возврашал true, если нет false. Какая функция будет быстрее?
 

dimagolov

Новичок
LONGMAN, а тест написать и проверить что именно в твоем случае лучше слабо?
 

LONGMAN

Dark Side of the Moon..
dimagolov
Показатели почти одинаковые, то одна функция выигривает, то другая.. Я хотел услишать ваше мнение, может где нибудь написано что лучше, или кто нибудь ставил компетентные тесты..
 

dimagolov

Новичок
ну чисто из логики. strpos ищет первое вхождение подстроки, а substr_count все, то есть substr_count явно медленнее в общем случае.
про strstr прямо сказано в мане
Note: If you only want to determine if a particular needle occurs within haystack , use the faster and less memory intensive function strpos() instead.
вывод - почитал бы ман, вопроса бы не возникло.
 

findnext

Новичок
LONGMAN
я бы не заморачивался с выбором функции, оптимизировать нужно тогда когда надо а не заранее

-~{}~ 25.03.09 18:51:

strpos() вполне подойдёт
 

LONGMAN

Dark Side of the Moon..
dimagolov
К сожалению я не дружу с английским.. :-( Но учусь
findnext
Ясно.
Значит юзаем strpos
 

dimagolov

Новичок
LONGMAN, да ну ладно. Русский ман пусть и менее актуальный, но именно это замечание там есть:
Замечание: Если нужно лишь определить, встречается ли подстрока needle в haystack , используйте функцию strpos(), которая работает быстрее и потребляет меньше памяти.
 

LONGMAN

Dark Side of the Moon..
PHP:
require("smiles.php");

$count = sizeof($smiles);
for($i=1; $i<$count; $i++)
{
$omsg = $msg;
$msg = str_replace($smiles[$i], $replaces[$i], $msg);
if($omsg !== $msg) break;
}
С помошью этого кода я пытаюсь осушествить вывод только одного смайла в сообшение.. Но это работает если в сообшение есть разные смайлы: .smile1. .smile2. а если они одинаковые .smile1. .smile1. то выводятся все, а я этого не хочу. Можно как нибудь сделать так что в любом случае выводил ТОЛЬКО первый смайл?
 

Beavis

Banned
Используй вместо [m]str_replace[/m] функцию [m]preg_replace[/m], там есть параметр limit
 

LONGMAN

Dark Side of the Moon..
Beavis
Точка в регулярках спец-символ? У меня смайлы типа .smile1. .smile2. значит нужно их переписать с обратными слешами?
 

LONGMAN

Dark Side of the Moon..
weregod
Большое спасибо, классная функция!

-~{}~ 30.03.09 17:01:

Возникла такая проблема, в БД глючит русская кодировка. Русские буквы преврашаюстя в ???. Кодировка таблиц utf8, SET NAMES utf8, php хеадеры utf8, в скрипте нету никакой перекодировки. Дело в том что проблема возникает в полях char, а в text всё работает. В первые столкнулся с такой проблемой
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху