Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » MySQL » Подсчёт чисел (цифр) в дополнительных полях?

Подсчёт чисел (цифр) в дополнительных полях?


     24.05.2017    Все вопросы » MySQL    2329

вопрос
Здравствуйте,

У меня такая проблема, давно ищу модуль, который мне поможет решить задачу с подсчётам чисел (цифр) в дополнительных полях. Нашёл что-то почти подходящие, но ещё немного не хватает функционала, нужна помощь Ваша, чтоб его дополнить.

- Модуль выводит все значения с определённого дополнительного поля только уникальные, надо чтоб выводил все.

- Надо чтоб учитывались категории и выборка по дополнительным полям одновременно, типа фильтра – то есть брать новости с категории х плюс где дополнительное поле значение ху. И сформировать сумму -> например возми категорию или категории х,х есть 3 новости с дополнительным полем Ху у него значение 0001, надо взять эти все новости и выдать сумму с другого дополнительного поля где внесены цифры типа 15, 20, 25 = 60 (это число которое должно выводиться везде где только возможно в любых tpl файлах.

Помогите пожалуйста знатоки дле и пхп, его немного доделать, может и ещё кому понадобиться.


<?php
/*
вывод списка введенных значений любого дополнительного поля
автор: ravchik
*/

if( ! defined( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); }

$xflist = dle_cache( $xfname, $config['skin'] );
if(!$xflist) {
	$sql_result = $db->query( "SELECT xfields FROM " . PREFIX . "_post WHERE approve=1" );
	while ( $rows = $db->get_row( $sql_result ) ) {
		$xfields[] = $rows;
	}	
	$stack = array();
	foreach($xfields as $value){
		if($value[xfields]){
			$row = xfieldsdataload($value[xfields]);
			if($row[$xfname]){
				$rowdata = explode( "~", $row[$xfname]);
				foreach($rowdata as $value){
					if($value){
						$value = trim($value);
						array_unshift($stack, $value);
					}
				}
			}
		}
	}
	$stack = array_unique($stack);
	sort ($stack);	
	foreach( $stack as $value ){
		$xflist .= "<li><a href='/xfsearch/" . $value . "'>" . $value . "</a></li>\n";
	}
	create_cache( $xfname, $xflist, $config['skin'] );
}
echo "<ul>" . $xflist . "</ul>";



1. Залить файл xflist.php в папку engine/modules/
2. В нужном месте main.tpl вставить {include file="/engine/modules/xflist.php?xfname=fieldname"}, где fieldname - название доп.поля

Ответа пока нет


17 комментариев

nowheremany
Эксперт

nowheremany - 24 мая 2017 16:14 -

Мне страшно от этого кода,а ваш сервер просто в ужасе поскрипывает процессором

Благодарность принимаю тут Связь

4iLi737
Юзер

4iLi737 - 24 мая 2017 16:26 -

Цитата: nowheremany
Мне страшно от этого кода,а ваш сервер просто в ужасе поскрипывает процессором


код не обязательный, просто нужно реализовать идею.
такое вообще возможно?

4iLi737
Юзер

4iLi737 - 24 мая 2017 17:15 -

Цитата: nowheremany
Мне страшно от этого кода,а ваш сервер просто в ужасе поскрипывает процессором


Нужна помощь в подсчете общей суммы из дополнительных полей, например у меня есть дополнительные поле "Цена", нужно подсчитать общею суму из новостей определенной категории и определенных доп. полей с определенным значением.

както это должно реализоваться, даже ексель это умеет.

nowheremany
Эксперт

nowheremany - 25 мая 2017 09:31 -

Эксель то умеет, но для того что бы сделать фильтр - ему нужно передать все новости со распарсенными полями, после чего делать выборку, но это не рационально, с точки зрения затраченных ресурсов.
Вам нужно сразу отфильтровать все что нужно вам считать, а потом уже складывать необходимо.

https://nowheredev.ru/main/82-mysql-optimizaciya-zaprosov-na-primere-dle.html тут в 4 пункте есть фильтр по доп полям, в 3 - фильтр по категориям. Дерзайте или пишите в стол заказов, потомоу что примерно такие вопросы уже были

Благодарность принимаю тут Связь

ravchik
Юзер

ravchik - 25 мая 2017 09:55 -

Нестрашный код от Sander'а:
<?PHP
require_once __DIR__ . "/engine/api/api.class.php";
require_once ENGINE_DIR . '/modules/functions.php';

$field = 'имя_поля_на_латинице';

$rows = $db->super_query( "SELECT xfields FROM ".PREFIX."_post", true );
$found = array();
foreach( $rows as $row )
{
    $x = xfieldsdataload( $row['xfields'] );
    if( $x[$field] ) $found[] = $x[$field];
}
//$found = array_unique( $found ); /*Закомментировано, чтобы выводило ВСЕ значения, а не уникальные*/
natcasesort( $found );
echo join("\n<br/>", $found );

nowheremany
Эксперт

nowheremany - 25 мая 2017 10:31 -

Тут вопрос не в коде, а в запросе - то что он вытаскивает все новости, а так он делает все тоже самое )) только использую стандартные функции )

Благодарность принимаю тут Связь

dj-avtosh
PHP-developer

dj-avtosh - 25 мая 2017 12:30 -

хоть бы LIKE сделали, для уменьшения выборки))

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Sander
PHP-developer

Sander - 25 мая 2017 13:09 -

Я думаю, при разовом ручном запросе, этим можно пренебречь :)

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

LazyDev
PHP-developer

LazyDev - 26 мая 2017 10:46 -

Сложно было понять что нужно было сделать. Люблю тратить время попусту, это любимое мое занятие. По этому написал такой код1. Создать файл xf_summ.php в engine/modules в него закинуть код выше.
2. Подключать так
{include file="engine/modules/xf_summ.php?xfield=year,budjet&cat=1&field=budjet"}

Где xfield - два доп поля через запятую, одно для какого складировать сумму с другого.
cat - id категорий, если нужно несколько то через запятую указывать.
field - то доп поле с которого нужно складировать сумму.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

4iLi737
Юзер

4iLi737 - 26 мая 2017 11:14 -

PunPun,
Вы гений, тот что надо вроде считает всё, как теперь подправить код, чтоб просто выводил число без ссылки?
Просто я не силён в пхп, извините оргомное вам человеческое спасибо и всех благ вам и вашей семь.

Ещё вопрос, выводит скрипт много сум зараз, например у меня сейчас есть доп. поле,называеться "plan" там значения разные типа "P00" тоесть если у новости в этом поле выбранно значение "P00" то выдай мне сумму с поля "qm" где вписали цифру учитывая категори. тоесть нужно одно число без ссылки.


С уважением
Александр

LazyDev
PHP-developer

LazyDev - 26 мая 2017 11:16 -

4iLi737, если вам просто число, то замените это
$xflist .= "<li><a href='/xfsearch/" . $key . "/" . urlencode( $index ) . "/'>" . $index . " ( " . $value . " )</a></li>\n";
На это
$xflist .= "<li>" . $index . " ( " . $value . " )</li>\n";
И кэш почистье.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

4iLi737
Юзер

4iLi737 - 26 мая 2017 11:32 -

PunPun,
проблеа ссылкой решилась спасибо Вам.

Ещё вопрос, выводит скрипт много сум зараз, например у меня сейчас есть доп. поле,называеться "plan" там значения разные типа "P00" тоесть если у новости в этом поле выбранно значение "P00" то выдай мне сумму с поля "qm" где вписали цифру учитывая категори. тоесть нужно одно число .

4iLi737
Юзер

4iLi737 - 26 мая 2017 13:53 -

Цитата: PunPun
4iLi737, если вам просто число, то замените это
$xflist .= "<li><a href='/xfsearch/" . $key . "/" . urlencode( $index ) . "/'>" . $index . " ( " . $value . " )</a></li>\n";
На это
$xflist .= "<li>" . $index . " ( " . $value . " )</li>\n";
И кэш почистье.


Почти всё работает, единственное сейчас пытаюсь сделать выборку, у меня есть поле, где можно выбрать несколько вариациый. Само доп. поле называеться plan, там типа списка в виде дроп меню, стандарт в дле. там можно выбрать разные варианты сейчас там у меня P00, P01, P02 итд. если я прописываю P01 скрипт выводит мне почемуто несколько цыфр в сумме с другой выборки P00, P02 итд. а надо чтоб если вписал значение и оно соответсвует выдавало именно сумму с P01 а другие не учитывались.

помогите ктонибудь доделать скрипт PunPun... совсем немного осталось.

4iLi737
Юзер

4iLi737 - 28 мая 2017 10:37 -

Народ, помогите, где что нужно подправить в скрипте, чтоб работало.
Огромное спасибо за помощь!


Скрипт всё считает, всё чётко работает, только смысл немного не тот.

Сейчас:
Скрипт ведёт подсчёт всех значений которые вносятся в доп. поле, например «year» это название доп. поля. Скрипт суммирует все значения от внесённых значений в это поле. То есть если вписано 2015, 2016, 2017 у каких-то новостей из выбранной категории, скрипт соберёт сумму всех этих годов из указанной категории и выдаст их в таком

виде:
- Сумма 2015
- Сумма 2016
- Сумма 2017

Нужно:
Скрипт должен выбирать не только поле, а ещё значение, то есть сложность повысить. Надо чтоб не само поле выводилось со всем что там внесено а именно значение которое внесли учитывалось заместо глобального поля. То есть задаются год 2016, учитывая категории как уже PunPun написал и скрипт должен выдать только одну цифру с 2016 года в сумме.

Chicago
Юзер

Chicago - 23 июня 2017 19:51 -

***Комментарий удален***

LazyDev
PHP-developer

LazyDev - 24 июня 2017 04:56 -

Chicago, это вы допустили ошибку, в том коде нет такой ошибки.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Chicago
Юзер

Chicago - 23 июня 2017 20:21 -

У кого-нибудь есть код, чтобы выводить ссылкой на странице все значения доп поля год + в скобках количество записей?

Например:

2017 (5 новостей)

2016 (18 новостей)

2015 (3 новости)

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх