Что лучший способ состоит в том, чтобы разделить литеральные значения из SQL для корректной идентификации рабочей нагрузки дб?

После foreach вы можете заполнить ваш массив нулями:

foreach ($product->info->details as $details) {
    $skuItem[] = $details->dtl1;
    $skuItem[] = $details->dtl2;
    $skuItem[] = $details->dtl3;
}

Массив теперь содержит:

0 => "123"
1 => "TEst"
2 => "123"

Теперь запустите:

$skuItem = array_pad($skuItem, 6, 0);

This будет добавлять нули в конец массива до тех пор, пока вы не получите в нем 6 элементов, поэтому массив теперь содержит:

0 => '123'
1 => 'TEst'
2 => '123'
3 => 0
4 => 0
5 => 0

Если вы хотите вместо строки ноль, то просто передайте это как 3-й аргумент: [1110 ]

$skuItem = array_pad($skuItem, 6, '0');

Выходы:

0 => '123'
1 => 'TEst'
2 => '123'
3 => '0'
4 => '0'
5 => '0'
5
задан brian d foy 20 October 2008 в 14:29
поделиться

6 ответов

SQL:: Оператор, в особенности SQL:: Оператор:: модуль Структуры, позволит Вам проанализировать и управлять SQL-операторами. Подмножество синтаксиса SQL, который это понимает, видно здесь.

В связанном примечании существует DBI:: Профиль для помощи с анализом производительности.

9
ответ дан 13 December 2019 в 22:19
поделиться

При использовании JDBC или чего-то как thar SQL не должен иметь никаких литералов, просто'?' маркировка, где они должны быть.

2
ответ дан 13 December 2019 в 22:19
поделиться

Я думаю, что использовал бы sed решить это. Что-то вроде этого

$ cat sql.txt
SELECT * FROM USER WHERE USERID = 123 OR USERNAME LIKE 'Name1%'
SELECT * FROM USER WHERE USERID = 124 OR USERNAME LIKE 'Name2%'
SELECT * FROM USER WHERE USERID = 125 OR USERNAME LIKE 'Name3%'
SELECT * FROM USER WHERE USERID = 126 OR USERNAME LIKE 'Name4%'

$ sed -e "s/\([0-9]\+\)\|\('[^']*'\)/?/g" sql.txt
SELECT * FROM USER WHERE USERID = ? OR USERNAME LIKE ?
SELECT * FROM USER WHERE USERID = ? OR USERNAME LIKE ?
SELECT * FROM USER WHERE USERID = ? OR USERNAME LIKE ?
SELECT * FROM USER WHERE USERID = ? OR USERNAME LIKE ?
-1
ответ дан 13 December 2019 в 22:19
поделиться

Я знаю, что Вы хотели независимую от базы данных опцию, но если Вы используете Microsoft SQL Server, свободный MS, ReadTrace (для SQL 2005) и Read80Trace (для SQL 2000) делают точно это. Они берут выходной файл трассировки и разделяют литералы. Я не видел независимого от дб решения ни один (и я работаю на программное обеспечение Quest, автора независимых от дб инструментов).

http://blogs.msdn.com/psssql/archive/2007/12/18/rml-utilities-for-microsoft-sql-server-released.aspx

0
ответ дан 13 December 2019 в 22:19
поделиться

Так, что Вы говорите, Вы, может иметь некоторые плохо работающие запросы, которые подобны, потому что они создаются динамично, и Вы хотите, чтобы они группировались, так как они происходят из того же вызова так, чтобы потраченное выполнение общего времени повысилось до вершины в Вашем профилировании?

Я думаю, что необходимо будет обработать это с regex или чем-то. Возможно, можно передать операторы через a SQL prettifier, таким образом, они последовательны первый, затем санируют их - литеральные строки должны быть самыми легкими, потому что они - все в '' (/'.*'/STRING_LITERAL/), и затем числовые литералы могли бы быть выполнимыми путем удаления /\d*/NUMERIC_LITERAL/ или подобный.

0
ответ дан 13 December 2019 в 22:19
поделиться

Система поиска исходного кода Semantic Designs сделает это тривиально, используя свой SQL-сканер.

Поисковая система анализирует исходный код для создания лексем, включая именно те буквальные строки, которые вы после. Индексирует все лексемы и использует этот индекс, чтобы вы могли искать / просматривать ваш источник база кода (даже если она огромна) в интерактивном режиме.

Запрос поисковой системы: S (да, просто S) найдет все буквальные символы «S» в вашем тексте SQL. Все результаты запроса отображаются в окне обращения, и вы можете щелкните свой путь, чтобы просмотреть рассматриваемый код из любого ударить. Есть средство ведения журнала, которое будет записывать все результаты для последующего анализа.

http://www.semanticdesigns.com/Products/SearchEngine/index.html

0
ответ дан 13 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

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