Метод RemoveInvalidXmlChars, предоставленный Irishman, не поддерживает суррогатных символов. Чтобы проверить его, используйте следующий пример:
static void Main()
{
const string content = "\v\U00010330";
string newContent = RemoveInvalidXmlChars(content);
Console.WriteLine(newContent);
}
Это возвращает пустую строку, но это не должно! Он должен возвращать «\ U00010330», потому что символ U + 10330 является допустимым символом XML.
Для поддержки суррогатных символов я предлагаю использовать следующий метод:
public static string RemoveInvalidXmlChars(string text)
{
if (string.IsNullOrEmpty(text))
return text;
int length = text.Length;
StringBuilder stringBuilder = new StringBuilder(length);
for (int i = 0; i < length; ++i)
{
if (XmlConvert.IsXmlChar(text[i]))
{
stringBuilder.Append(text[i]);
}
else if (i + 1 < length && XmlConvert.IsXmlSurrogatePair(text[i + 1], text[i]))
{
stringBuilder.Append(text[i]);
stringBuilder.Append(text[i + 1]);
++i;
}
}
return stringBuilder.ToString();
}
То, что вы ищете, это this
SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
cond1, cond2, ..., condN
LIMIT 10
SELECT FOUND_ROWS();
'это 4 года с момента последнего ответа, но именно так я решил проблему. Хотя ответ SaltLake вызвал у меня ошибку, это привело меня к правильному ответу.
SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION
SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL
ORDER BY IssueDate, VolumeNo
Часть UNION очень важна, потому что она отмечает ваш желаемый ответ (общее количество строк), который извлекается в SECOND Выберите результат в результатах FIRST Select.
Еще один очень важный момент состоит в том, что, поскольку UNION имеет место, обе таблицы должны иметь одинаковое количество столбцов в них. Обычно это означает, что вам нужно вставить SECOND Select с важным значением FOUND_ROWS (), а затем много значений NULL.
Конечным результатом будет одна команда, которая вернет 11 строк информации, с одним из этих строк, содержащим общее количество строк. Очевидно, вам нужно будет исключить дополнительную строку TotalRows, когда вы приступите к использованию результата.
Вы можете использовать SQL_CALC_FOUND_ROWS с FOUND_ROWS () , чтобы подсчитать количество результатов во время выполнения этого запроса. В основном вы просто добавляете «SQL_CALC_FOUND_ROWS» после «SELECT», а затем запускаете еще один запрос «SELECT FOUND_ROWS ()». Невозможно отправить счетчик в том же запросе, потому что он не может знать счетчик до завершения запроса.
Вы должны использовать
SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME, FOUND_ROWS() as rCount
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
cond1, cond2, ..., condN
LIMIT 10
Решение из http://is.php.net/manual/en/function.mysql-num-rows.php#83647
SELECT SQL_CALC_FOUND_ROWS
'0', z.id
FROM
zoom AS z
LIMIT 0,6
UNION
SELECT
'1', FOUND_ROWS()
ORDER BY `0` DESC , RAND()