PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (5): [1] 2 3 4 5 »

> Найдено сообщений: 69
Lolya Отправлено: 05 Октября, 2021 - 12:32:43 • Тема: Обновление двух таблиц одинаковыми данными • Форум: Вопросы новичков

Ответов: 0
Просмотров: 255
Есть две таблицы с одинаковыми данными, нужно объединить в один запрос обновлением этих двух таблиц сразу, а не два запроса вешать.

Сейчас это выглядит так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $torrents = array();
  3. $res = sql_query("SELECT torrent, seeder, COUNT(*) AS c FROM peers GROUP BY torrent, seeder") or sqlerr(__FILE__,__LINE__);
  4. while($row = mysql_fetch_assoc($res)){if ($row["seeder"] == "yes")$key = "seeders";else $key = "leechers";$torrents[$row["torrent"]][$key] = $row["c"];}
  5. $res = sql_query("SELECT torrent, COUNT(*) AS c FROM comments GROUP BY torrent") or sqlerr(__FILE__,__LINE__);
  6. while($row = mysql_fetch_assoc($res)){$torrents[$row["torrent"]]["comments"] = $row["c"];}$fields = explode(":", "comments:leechers:seeders");
  7. $res = sql_query("SELECT id, seeders, leechers, comments FROM torrents") or sqlerr(__FILE__,__LINE__);while($row = mysql_fetch_assoc($res)){$id = $row["id"];$torr = $torrents[$id];
  8. foreach($fields as $field){if(!isset($torr[$field]))$torr[$field] = 0;}$update = array();foreach($fields as $field){if($torr[$field] != $row[$field])$update[] = "$field = ".$torr[$field];}
  9. if(count($update)){sql_query("UPDATE torrents SET ".implode(", ", $update)." WHERE id = $id") or sqlerr(__FILE__,__LINE__);
  10. sql_query("UPDATE browse SET ".implode(", ", $update)." WHERE id = $id") or sqlerr(__FILE__,__LINE__);}}
  11.  


Если я меняю на:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if(count($update)){sql_query("UPDATE torrents, browse SET ".implode(", ", $update)." WHERE id = $id") or sqlerr(__FILE__,__LINE__);}
  3.  


то бьет ошибку на неизвестное поле seeders для запроса обновления. Это поле есть в одной и другой таблице, все три поля что обновляются, присутствуют в этих двух таблицах.

Подскажите что я не так делаю. Спасибо за подсказки.
Lolya Отправлено: 26 Июня, 2021 - 20:25:08 • Тема: что можно использовать вместо LIKE (искать похожие слова-теги) • Форум: Вопросы новичков

Ответов: 10
Просмотров: 717
Вопрос решен, просьба закрыть тему.
Сделана отдельная таблица с id, keywords, name. По ней поиск в 10 раз быстрее чем по основной странице.
Lolya Отправлено: 15 Июня, 2021 - 11:20:11 • Тема: что можно использовать вместо LIKE (искать похожие слова-теги) • Форум: Вопросы новичков

Ответов: 10
Просмотров: 717
Индексы это старые, уже давно другие, это я пример с бекапа показала старого.
...
На выходных сделаю что хотела, результат напишу.
Lolya Отправлено: 14 Июня, 2021 - 11:15:04 • Тема: Кнопка "наверх" • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 2017
don.bidon пишет:
Vladimir Kheifets пишет:
Хотелось бы увидеть как работает Ваша проста. Мне не удалось. Пустота.

в правом нижнем углу штырь появляется, ну и якорь вверху документа нужно обозначить.

Не штырь а вверх стрелочка из знаков таблицы юникода. Прописывать дополнительно ничего не нужно, в самом html уже это есть, ибо top, это значит прижать вверх страницы.

Цвет можно вставить в гиперссылки в принципе.
Lolya Отправлено: 14 Июня, 2021 - 09:21:22 • Тема: что можно использовать вместо LIKE (искать похожие слова-теги) • Форум: Вопросы новичков

Ответов: 10
Просмотров: 717
don.bidon пишет:
если ничего не путаю, при LIKE индексуй-не индексуй, всё равно без индекса буде
а по поводу запросов, вначале запроса на выборку DESCRIBE подставляем и смотрим, что происходит, какие индексы используются и прочее.

> Есть идеи как это провернуть?
Какой бюджет?


Нет, индекс будет использоваться для поля тегов

>Бюджет: €0.00000000000 Улыбка
Я не на продажу, видите же что на ГИТ выложено обновлениями бесплатно. Есть конечно свои моды, которые не будут в свободном доступе, но именно этот фришный.

Итак, идея назрела, чуток обмозговала. И.... Ерунда получилась. Показываю по вариантам.
_--------
Вариант 1.
Запрос:
PHP:
скопировать код в буфер обмена
  1. Select id from torrents where keywords like '%$search%'

Получаем ид, потом в торрент-табле.пхп подключать через него весь основной обвес старого запроса в цикле. Но это выходит не 1 запрос на страницу с 25 фильмами, а 1+25=26. Да, они будут быстрыми по исполнению, но 25!!! Короче этот вариант попа*.

Вариант 2.
Получать опять же через запрос ид, но впихнуть в array(); - список ид, которые потом скормить второму запросу, который будет уже цикличным и выдавать результат по 25 фильмов на страницу с всего 2 запросами...
Как-то так:

Осталось написать цикл для списка составления этих ид.
Надеюсь правильно мысль толкнула, поймёте?

Вариант 3. Неверный как по мне.
Запрос в запросе. Выборка всего основного запроса по ид что берем в этом же запросе второй выборкой.
PHP:
скопировать код в буфер обмена
  1. select torrents.*, bookmarks.*, users.* from torrents, bookmarks, users where id = (Select id from torrents where keywords like '%$search%')

Ну, как то так примерно. Но на таком варианте будет только один фильм всегда на выходе. Вроде так, поправьте если ошиблась.
Lolya Отправлено: 14 Июня, 2021 - 06:23:21 • Тема: что можно использовать вместо LIKE (искать похожие слова-теги) • Форум: Вопросы новичков

Ответов: 10
Просмотров: 717
don.bidon пишет:
Есть варики, но там гугл в помощь, а по тегам я бы на полное соответствие искал.

Пробовали, не выходит. Гугл пока ничего не нашел лучше чем лайкать.

Чтобы понимали о чём идёт речь, вот страница всех релизов с поиском: https://github[dot]com/lolyworlds/Lo[dot][dot][dot]aster/browse.php
Вот доп.страница функции построения строк: https://github[dot]com/lolyworlds/Lo[dot][dot][dot]torrenttable.php

Теперь идём дальше. Пришла мысль такая:
Искать ид для тега через лайк. То-есть запрос будет только такой:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Select id from torrents where keywords like '%$search%'
  3.  

Потом подключать к уже найденному результату все остальные обвесы. Вот думаю как это реализовать с подгрузкой доп.запросов.

Я так думаю что в этом варианте поиска только ид через лайк тега будет индекс пользоваться и не нагружаться сильно мускуль поиском по тысячам строкам.

Есть идеи как это провернуть?
Lolya Отправлено: 13 Июня, 2021 - 23:16:51 • Тема: что можно использовать вместо LIKE (искать похожие слова-теги) • Форум: Вопросы новичков

Ответов: 10
Просмотров: 717
don.bidon пишет:
Сами додумаете?

Один черт через LIKE искать? Без него никак ? Я под старый пых пока делаю - FastCGI (Nginx + PHP-FPM) PHP 5.4.45

Под ПЫХ 8.0.3 то на Редбине проще поиск оформить, тут-же подумать надо...
Lolya Отправлено: 13 Июня, 2021 - 22:00:38 • Тема: что можно использовать вместо LIKE (искать похожие слова-теги) • Форум: Вопросы новичков

Ответов: 10
Просмотров: 717
Собственно есть таблица, в ней ячейка keywords с ключевыми словами-тегами, перечисленными через запятую для каждой новой строчки-новости.
Пример таблицы (урезанный):

CODE (htmlphp):
скопировать код в буфер обмена
  1. CREATE TABLE `movies` (
  2.   `id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(175) NOT NULL DEFAULT '',
  4.   `keywords` varchar(3072) NOT NULL,
  5.   `image1` varchar(15) NOT NULL,
  6.   `descr` varchar(5000) NOT NULL,
  7.   `descr_html` varchar(5000) NOT NULL,
  8.   `fulldescr` text NOT NULL,
  9.   `fulldescr_html` text NOT NULL,
  10.   `category` tinyint(1) unsigned NOT NULL DEFAULT '0',
  11.   `added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  12.   `comments` tinyint(3) unsigned NOT NULL DEFAULT '0',
  13.   `owner` mediumint(5) unsigned NOT NULL DEFAULT '0',
  14.   `allow_comments` enum('yes','no') NOT NULL DEFAULT 'yes',
  15.   `dostup` enum('adm','mod','upl','vip','uhd','1080p','user') NOT NULL DEFAULT 'mod',
  16.   PRIMARY KEY (`id`),
  17.   UNIQUE KEY `indexss` (`added`) USING BTREE,
  18.   UNIQUE KEY `name_added` (`added`,`name`) USING BTREE,
  19.   UNIQUE KEY `category_added` (`category`,`added`) USING BTREE,
  20.   KEY `index` (`added`,`id`,`name`,`image1`,`category`,`owner`,`dostup`) USING BTREE,
  21.   KEY `keywords` (`keywords`(333)),
  22.   KEY `index_bookmarks` (`added`,`id`,`name`,`image1`,`category`,`owner`,`dostup`) USING BTREE
  23. ) ENGINE=MyISAM AUTO_INCREMENT=295 DEFAULT CHARSET=utf8;


для поиска по словам-тегам:
CODE (htmlphp):
скопировать код в буфер обмена
  1. WHERE t.keywords LIKE '%мама%' ORDER BY t.added DESC LIMIT 0,25


Запрос выходит проблемный очень. Грузит сильно мускуль, в таблице много строк - около 1500 и будет еще больше со временем. Индексы есть, но хочется убрать этот костыль и как-то по другому поиск организовать.

Есть мысль о внешней (другой) таблице, где будут все теги и искать там, получая цифру-ID и по ней уже искать в таблице movies. Но это опять вопрос - как именно?

Кто что подскажет?

Заранее спасибо.
Lolya Отправлено: 13 Июня, 2021 - 21:33:32 • Тема: Кнопка "наверх" • Форум: JavaScript & VBScript

Ответов: 7
Просмотров: 2017
Простота наше всё.
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div align="center"><a href="#top" style="position:fixed;bottom:0pt;right:0pt;"><font size='6'>&#11145;</font></a></div>
Lolya Отправлено: 20 Марта, 2021 - 13:11:28 • Тема: кэширование, когда обновлять кэш? • Форум: Вопросы новичков

Ответов: 10
Просмотров: 927
DlTA пишет:
так сейчас работает, но это не проверка на измененные данные

Сбрасывалку кеша не пробовали сделать в файл подтверждения действия - редактирования, удаления и что там еще у вас...
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $flist = $rootpath."cache/relizs.cache";if(file_exists($flist)){unlink($rootpath."cache/relizs.cache");}
Lolya Отправлено: 14 Марта, 2021 - 11:45:54 • Тема: кэширование, когда обновлять кэш? • Форум: Вопросы новичков

Ответов: 10
Просмотров: 927
DlTA пишет:
это техника, это уже работает, вопрос в том когда кешу ОПА и пора делать новый

по времени кеш использовать. Пример кеша:

CODE (htmlphp):
скопировать код в буфер обмена
  1. global $CacheBlock, $k1Block_Refresh;$_cache = 'cashe-0.cache';
  2. if(!$CacheBlock->Check($_cache, $k1Block_Refresh?0:86400)){ //1 den!
  3. ****
  4. $content = "****";
  5. ****
  6. $CacheBlock->Write($_cache, $content);}else $content = $CacheBlock->Read($_cache);
Lolya Отправлено: 22 Февраля, 2021 - 18:20:47 • Тема: Защита сессий • Форум: Вопросы новичков

Ответов: 11
Просмотров: 722
Vladimir Kheifets пишет:
Желательно, выбрать собеседника поздоровее.

Я на самбо и техвандо ходила, хоть и слабая девушка, но выдать могу неглядя кому надо пилюлей.
Lolya Отправлено: 22 Февраля, 2021 - 09:06:25 • Тема: Защита сессий • Форум: Вопросы новичков

Ответов: 11
Просмотров: 722
Vladimir Kheifets пишет:
Мда.. не грубовато ли?

Строитель пишет:
Lolya, не хамите!

А где вы оскорбление увидели? Или то что человек не думая выдает глупые мысли это нормально? Не смешите. HTTPS не спасает от воровства, от слова никак. Читать надо прежде чем ерунду писать.
Lolya Отправлено: 21 Февраля, 2021 - 11:16:40 • Тема: Проверка username(nickname) • Форум: Вопросы новичков

Ответов: 3
Просмотров: 459
а не проще так одной строкой?
CODE (htmlphp):
скопировать код в буфер обмена
  1. $usernames = iconv('cp1251', 'UTF-8', $username);
Lolya Отправлено: 21 Февраля, 2021 - 11:05:44 • Тема: кэширование, когда обновлять кэш? • Форум: Вопросы новичков

Ответов: 10
Просмотров: 927
DlTA пишет:
а есть что то, чтоб свой лесопед не лепить
нужно получить список таблиц в запросе, где-то хранить


Удаление кеш-файла
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. define ('ROOT_PATH', dirname(dirname(__FILE__))."/");
  3. $rootpath = ROOT_PATH;
  4. $Blrelizs_cache = $rootpath."cache/relizs.cache";if(file_exists($Blrelizs_cache)){unlink($rootpath."cache/relizs.cache");}
  5.  

создание кеша у вас должно уже быть, если вы с ним работаете, у всех системы кеша разные.
Собственно пример:

Если нет кеша (отсутстует), то выполнить запрос ***. Иначе прочитать данные кеша.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $Blrelizs_cache = $rootpath."cache/relizs.cache";if(!file_exists($Blrelizs_cache)){
  3. // выполнить запрос на прочтение данных из базы
  4. }else
  5. // иначе считываем кеш вашей системой кеширования
  6.  


Разберетесь?

Страниц (5): [1] 2 3 4 5 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB