Смотри какая ситуация там была. таблица которая отдавалась от портала, её нельзя было изменить не давал ни запрос ни phpmyadmin Он просто брал и выдавал ошибку при этом мол типа заблокированные поля и т.д! Что мы сделали мы создали свою таблицу копию со своими индексами с игорем и решили не таблицу целиком заливать, а заливать конкретно данные в уже существующую, но mysql выдал ошибку мол невозможно разные тип полей или что-то типа того уже не помню. В итоге полная попка была. А на запрос в контору портала добавить индекс на поле таблицы послали далеко в жопу. --- Добавлено --- В итоге таблицу можно было только как она есть добавлять. Я уже не помню что мы там сделали, но в результате плясов с бубнами получилось сократить время запроса почти в двое. И удалось разгрузить процессор, тоже в двое....
В проектах где критична производительность и большой трафик запрос клиента как правило не инициирует запросов данных из первичного хранилища вовсе. Данные отдаются из кеша, при изменении записи инициируется обновление кеша.
В проектах не должна быть критична производительность из-за 30-50 тысяч позиций. Простой хост без траблов и с норм кодом это обрабодает без проблем. А вот взять любую cms ет ппц чё там будет. --- Добавлено --- Программист будет играть в шарады с движком. Где cms говорит угадай - ка вот где: И он такой ну дава, а вот здесь: - ай бл. что это за х.ня
@askanim, вы действительно считаете, что взять "любую cms" и все разработчики на столько глупее вас? Вы исключаете, что те или иные решения принимались на основе обширного опыта, в т.ч. фидбэка от пользователей этих самых cms? PS Вот уже какое сообщение гложет вопрос: вы читали буквари по проектированию БД?
Если программист играет в шарады с движком, то стопудово этот программист поленился прочитать документацию. Еще ни один движок/cms не заставлял делать ни чего подобного.
что ты там про доку битрикса говорил она устарела? с 2007 года. Так как в ней находить то что правильно а что нет. Кукусь привет. Сначала адекватные доки пусть напишут. Так вот из всех вминяемых cms которые я всречал был ток modx всё. Остальные все труба, пиши пропало влево вправо движок с докой говорит тебе ариведерчи. Так что не надо мне ёлки навязывать свои точки зрения хочется холивара по орать не тот раздел выбрал.
Вообще интересно даже.: вы свой дивжок будете продавать, будет он только для себя или будет распространяться свободно? Вдруг революцию совершите... --- Добавлено --- Да? А мужики то и не знали... Просто в 2007 описали функционал который появился, например, с 2015 по 2017 год... заранее.. А на холивар сам не сворачивай. Я по той доке нормально изучил инструмент, остальное добрал по коду без всяких шарад. Давай таки вернемся к сути. Ты пишешь движок. Судя по тому что ты хотел на него магазин перевести, функционал таковой имеется/планируется. И там ты собираешься обойтись без джоинов?
В компаниях приоритетно занимающихся разработкой на Drupal данные аналогично отдаются из SOLR, никаких сложных запросов на лету к реляционной базе данных. Тема утратила свой юмор. Ушел.
я не использую движки. Максимум у меня есть свой framework собственные библы и то состоят от части из других библиотек подтягивающимися композером. --- Добавлено --- А теперь просто возьми теперь свои глаза и подними на несколько постов выше и почитай, и посмотри посты выше, а то чёт ты ослеп от старости не? И где ты увидел в какой месте что я пишу что я собираюсь полностью обойтись без них. Алё я писал вот что: Или ты читаешь и не понимаешь что я написал? --- Добавлено --- А в чём юмор?
кстати нашёл старую баталию https://php.ru/forum/threads/postgresql-pomogite-pokushat.62765/ --- Добавлено --- там было чутка про ORM --- Добавлено --- на ещё тему по ори https://php.ru/forum/threads/ux-skoro-sajt-na-mojom-dvige-zarabotaet.59796/
Сделал небольшой класс лайков и дизлайков, всё хорошо работает, нормальный ли этот код? Наверно всё таки плохо, то, что я сделал добавление ников, в поле пользователей, которые уже проголосовали, а не айдишников? PHP: <?php //проверка на авторизацию. public function loginVerification() { $user = $this->auth->isLoggedIn(); if(!$user) { echo 'Авторизируйтесь'; die; } } //проверяет, какие пользователи, уже голосовали. public function getVoted($id) { $login = $this->auth->getUsername(); //достаёт логин из сессии $res = $this->database->find('comments', $id); //достаёт все поля строки (коммента) $allUsers = $res['logins']; //достаёт проголосовавших пользователей preg_match_all('#([a-zA-Z0-9а-яА-Я]+)#u', $allUsers, $matches); if (in_array($login, $matches[0])) { return false; } else { return $matches; } } //обновляет счётчик комментария, для выбранной строки. public function updateComment($id, $currentCount, $login, $row, $allUsers) { $oldUsers = implode(",", $allUsers[0]); //для того, что бы обновить строку с юзерами, а не заменить, на одного if($row == 'like_comment') { //для лайка $this->database->update('comments', $id, ['like_comment' => $currentCount]); } else {//для дизлайка $this->database->update('comments', $id, ['dislike_comment' => $currentCount]); } $this->database->update('comments', $id, ['logins' => $oldUsers.','.$login.',']); } public function like() { $id = $_POST['id']; $this->loginVerification(); $login = $this->auth->getUsername(); if(!$this->getVoted($id)) { echo 'Вы уже голосовали'; die; } $res = $this->database->find('comments', $id); $currentCount = $res['like_comment'] + 1; $this->updateComment($id, $currentCount, $login, $row = 'like_comment', $allUsers = $this->getVoted($id)); echo $currentCount; } public function dislike() { $id = $_POST['id']; $this->loginVerification(); $login = $this->auth->getUsername(); if(!$this->getVoted($id)) { echo 'Вы уже голосовали'; die; } $res = $this->database->find('comments', $id); $currentCount = $res['dislike_comment'] + 1; $this->updateComment($id, $currentCount, $login, $row = 'dislike_comment', $allUsers = $this->getVoted($id)); echo $currentCount; }
@Dimon2x. не очень хорошо. первая причина - добавление ников в ту же таблицу, вторая причина - этот класс может работать только с коммантами, ты не сможешь перетащить его без изменений в проект, где тебе нужно будет лайкать ещё и статьи. Третья причина - он делает слишком много, работает с сессиями, с базами данных, ищет самостоятельно комментарии. Попробуй такой класс сделать и так организовать базу данных, чтоб можно было его подключить к лайкам чего угодно. Если не получится, я тебе расскажу, как я это делал. Но ведь самому придумать интереснее, не так ли? --- Добавлено --- Самый большой недостаток твоего хранения ников в таблице с лайками - это то, что нет нормального способа получить, к примеру, список комментов, которые лайкнул Dima. Или получить список всех комментариев, которые лайкали пользователи возрастом больше 10 лет.
Просмотр всех статей забавно выглядит. Все будет уезжать. Сделай фиксированную высоту картинки и текста
У тебя jquery не добавлен без него в bootstrap многоe работать не будет. Сделай окно маленьким и попробуй открыть меню. --- Добавлено --- Это ckeditor такое творит? Полное описание
@nospiou @mkramer @MouseZver @askanim @romach @voral @Zuldek @igordata Хочу понять, что такое полиморфизм и для примера, решил сделать типа библиотеку, которая может работать с разными драйверами подключениями баз. Это полиморфизм? Можно ли как-то это сократить PHP: $pdo = new Db($host, $db, $user, $pass, (new DbPDO($host, $db, $user, ''))); , что бы не дублировать? PHP: <?php error_reporting(E_ALL); interface DbInterface { public function show($table); } class Db { public $host; public $dbname; public $user; public $password; public $dbdriver; public function __construct($host, $dbname, $user, $password, DbInterface $dbd) { $this->host = $host; $this->dbname = $dbname; $this->user = $user; $this->password = $password; $this->dbdriver = $dbd; } public function query() { $this->dbdriver->show($table); } } class DbPDO implements DbInterface { private $host; private $dbname; private $user; private $password; private $dsn; private $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; public function __construct($host, $dbname, $user, $password) { $this->host = $host; $this->dbname = $dbname; $this->user = $user; $this->password = $password; $this->dsn = "mysql:host=$this->host;dbname=$this->dbname;charset=utf8"; } public function show($table) { $pdo = new PDO($this->dsn, $this->user, $this->password, $this->opt); $sql = "SELECT login FROM $table"; $stmt = $pdo->query($sql); $res = $stmt->fetchAll(); return $res; } } class DbMySqli implements DbInterface { private $host; private $dbname; private $user; private $password; public function __construct($host, $dbname, $user, $password) { $this->host = $host; $this->dbname = $dbname; $this->user = $user; $this->password = $password; } public function show($table) { $mysqli = new mysqli($this->host, $this->user, $this->password, $this->dbname); $sql = "SELECT login FROM $table"; $result = $mysqli->query($sql); $result = mysqli_fetch_all($result); return $result; } } $host = 'localhost'; $db = 'oop'; $user = 'root'; $pass = ''; $pdo = new Db($host, $db, $user, $pass, (new DbPDO($host, $db, $user, ''))); $mySqli = new Db($host, $db, $user, $pass, (new DbMySqli($host, $db, $user, ''))); echo '<pre>'; print_r($pdo->dbdriver->show('users')); echo '</pre>'; echo '<pre>'; print_r($mySqli->dbdriver->show('users')); echo '</pre>';