Считайте строки с лимитом [duplicate]

Метод 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();
}

18
задан SaltLake 13 March 2010 в 21:00
поделиться

5 ответов

То, что вы ищете, это 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();
33
ответ дан Shuriken 21 August 2018 в 01:49
поделиться
  • 1
    Благодаря! Это отлично работает в мониторе mysql. Но в PHP второй запрос возвращает 1. Как правильно выполнить эти два запроса в PHP? – SaltLake 13 March 2010 в 21:43
  • 2
    Какую версию PHP вы установили? Взгляните на этот stackoverflow.com/questions/674061/… – Shuriken 13 March 2010 в 21:50

'это 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, когда вы приступите к использованию результата.

5
ответ дан Alan N 21 August 2018 в 01:49
поделиться

Вы можете использовать SQL_CALC_FOUND_ROWS с FOUND_ROWS () , чтобы подсчитать количество результатов во время выполнения этого запроса. В основном вы просто добавляете «SQL_CALC_FOUND_ROWS» после «SELECT», а затем запускаете еще один запрос «SELECT FOUND_ROWS ()». Невозможно отправить счетчик в том же запросе, потому что он не может знать счетчик до завершения запроса.

7
ответ дан animuson 21 August 2018 в 01:49
поделиться

Вы должны использовать

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
-1
ответ дан Krishna 21 August 2018 в 01:49
поделиться

Решение из 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()
0
ответ дан SaltLake 21 August 2018 в 01:49
поделиться
Другие вопросы по тегам:

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