parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Misha v.3 02.04.2015 11:30 / 02.04.2015 11:34

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

0. оставьте только один ^connect[] вокруг всего кода. незачем повторяться.

1. кода много. много очень похожих кусков. вас это не смущает? почему не вынести повторяющийся код в отдельные методы?
например:
@getThreads[params]
$result[^table::sql{
	SELECT
		id,
		sectionID,
		threadID,
		parentID,
		uID,
		date,
		mess,
		closed
	FROM
		questions
	WHERE
		1 = 1
		^if(def $params.sectionIDs){AND sectionID IN ($params.sectionIDs)}
		^if(def $params.parentIDs){AND parentID IN ($params.parentIDs)}
		^if(def $params.threadIDs){AND threadID IN($params.threadIDs)}
		^if(def $params.uIDs){AND uID IN($params.uIDs)}
	ORDER BY
		date DESC
}[
	^if(def $params.limit){
		$.limit(^params.limit.int(0))
	}
]]
а потом вызывать примерно так:
$Q[^getThreads[
	$.parentIDs(0)
	$.threadIDs($operator.threadID)
]]
кода станет гораздо меньше и разбираться в нём станет уже проще.

2. вы делаете sql запросы в циклах. обычно это будет приводить к проблемам с производительностью SQL сервера.
прочитайте про деревья. у вас уже есть всё, чтобы доставать всё необходимое в цикле одним запросом, например, если
посмотреть на первый цикл ^questions.menu{} и получение в нем $operators, то можно сделать так:
$tOpQuestions[^getThreads[
	$.threadIDs[^questions.menu{$questions.threadID}[,]]
]]
$hOpQuestions[^tOpQuestions.hash[threadID][$.type[table]]]
^questions.menu{
	$operators[$hOpQuestions.[$questions.threadID]]
	^operators.menu{
		... это содержимое можно переделать аналогично, чтобы не делать sql запросов в цикле.
	}
}
P.S. если не очень понятно что происходит с ^таблица.hash[поле][$.type[table]], то скачайте и подключите Debug.p. а потом, после этого метода напишите ^dstop[ $.t[$tOpQuestions] $.h[$hOpQuestions] ] и увидите всю структуру было/стало.