Проверка, вернули ли строки MySQL> 10 и, если это так, запуск некоторого кода, если не выполняется другой фрагмент кода - PullRequest
0 голосов
/ 11 апреля 2011

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

Код:

    mysql_select_db("blahblah", $con); //connect to database..
    $username =  basename(dirname(__FILE__));
    $username = mysql_real_escape_string($username);
    $checkres = mysql_query("SELECT COUNT link, notes, titles, color FROM links WHERE username='" . $username . "';");
    if ($checkres>10)
    {
    $resultsmall = mysql_query("SELECT link, notes, titles, color FROM links WHERE username='" . $username . "' LIMIT 10;");
    while ($rowsmall = mysql_fetch_array($resultsmall)) { //loop
      extract($rowsmall);
      $htmlsmall .= "
//code goes here to format results
                ";
    echo $htmlsmall; //display results...
    }
    }
    else {
    $result = mysql_query("SELECT link, notes, titles, color FROM links WHERE username='" . $username . "';");
    while ($row = mysql_fetch_array($result)) { //loop
      extract($row);
      $html .= "
            //code goes here to format results
                ";
    echo $html; //display results...
    }
    }
    mysql_close($con); //close db..

Но он просто отображает в два раза количество строк вбазы данных вместо того, чтобы либо ограничивать ее, либо отображать их все.Как бы я это исправить?//code goes here for formatting не важен, он просто форматирует код, чтобы он выглядел красиво и отображал его в окне ...

Спасибо!

РЕДАКТИРОВАТЬ:

Iтеперь есть этот код, но теперь он вообще ничего не отображает?Может ли кто-нибудь помочь:

Код:

mysql_select_db("blahblah", $con); //connect to database..
$username =  basename(dirname(__FILE__));
$username = mysql_real_escape_string($username);
$sql = "SELECT SQL_CALC_FOUND_ROWS link, notes, titles, color FROM links WHERE username='" . $username . "' LIMIT 10";
$result = mysql_query($sql) or die("MySQL error: " . mysql_error());

$subsql = "SELECT found_rows() AS foundrows;";
$subresult = mysql_query($subsql) or die("MySQL error: " . mysql_error());
$found_rows = $subresult['foundrows'];

if($found_rows > 10)
{
  while($row = mysql_fetch_array($result))
  {
    extract ($row);
    $html .= "
      //getting values from columns and then formatting them goes here
    ";                                             

    echo "Only 10 is allowed.";
  }
} 
else
{
  while($row = mysql_fetch_array($result))
  {
    extract($row);
    $html .= "
      //getting values from columns and then formatting them goes here
    ";
  }
}
mysql_close($con); //close db..

Спасибо!

РЕДАКТИРОВАТЬ 2 (12 апреля 14:03 2011 GMT):

У меня сейчас естьэтот код, который любезно помог полковник Шрапнель, но он ничего не показывает для меня, и я не знаю почему, пожалуйста, помогите.

Код:

mysql_select_db("blahblah", $con); //connect to database..
$username =  basename(dirname(__FILE__));
$username = mysql_real_escape_string($username);
$sql = "SELECT link, notes, titles, color FROM links WHERE username='$username' LIMIT 10";
$res = mysql_query($sql);
if (mysql_num_rows() == 10) {
while ($row = mysql_fetch_array($res)) {
  extract($row);
  $htmlsmall .= "

= "; $ htmlfree. =" Разрешено только 10. "; echo $ htmlsmall; echo $ htmlfree;}} else {while ($ row = mysql_fetch_array ($ res)) {extract ($ rowmall); $ htmlsmall. ="

  ";
echo $htmlsmall;
}
}

Теперь, если я просматриваю исходный код страницы, я вижу следующие 2 ошибки:

<b>Warning</b>:  Wrong parameter count for mysql_num_rows() in <b>//url was here</b> on line <b>109</b><br /> 


<b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>//url to file goes here</b> on line <b>125</b><br /> 

Строка 109 такая: if (mysql_num_rows() == 10) {

Строка 125 такая: while ($row = mysql_fetch_array($res)) {

(Эти строки в коде выше)

Пожалуйста, кто-нибудь может мне помочь с этим?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 12 апреля 2011

mysql_query() возвращает либо дескриптор оператора результата, либо логическое значение FALSE, если запрос не выполнен. Ваш внешний запрос недействителен:

SELECT COUNT ...

не работает, поэтому запрос завершается неудачно, возвращает false, что переходит к нижнему «неограниченному» запросу.

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

То, что вы хотите, это

$sql = "SELECT SQL_CALC_FOUND_ROWS link, notes, etc.... LIMIT 10";
$result = mysql_query($sql) or die("MySQL error: " . mysql_error());

$subsql = "SELECT found_rows() AS foundrows;";
$subresult = mysql_query($subsql) or die("MySQL error: " . mysql_error());
$found_rows = $subresult['foundrows'];

if ($found_rows > 10) {
   ... there's more than 10 rows available, though we're fetching only 10 because of the LIMIT
} else {
   ... 10 rows or less
}

SQL_CALC_FOUND_ROWS - это расширение MySQL, которое заставляет MySQL вычислять, сколько строк было бы извлечено, если бы не было предложения LIMIT. Вы можете получить результаты этого вычисления с помощью функции запроса found_rows().

Таким образом, вы запускаете основной запрос только один раз, выполняете очень очень быстрый запрос found_rows () и все готово.


Учитывая, что вы, кажется, не форматируете свои выходные данные по-разному между версиями «больше 10» и «10 или меньше», за исключением строки «только 10 разрешенных», как насчет этого:

$sql = "...";
$result = mysql_query($sql) or die(mysql_error());

$rowcount = 0;
while ($row = mysql_fetch_assoc($result)) {
    $rowcount++;
    ... output a row ...
    if ($rowcount > 10) {
        echo "Only 10 allowed";
        break;
    }
}

Нет необходимости дублировать код, лишнюю логику и т. Д., Когда что-то простое сделает.

1 голос
/ 12 апреля 2011

Я пытаюсь добавить некоторый код, чтобы проверить, больше ли возвращаемых строк, чем 10, а затем запустить некоторый код, чтобы ограничить количество строк 10

Это не имеет смысла.
Просто запустите ваш запрос с LIMIT 10, и вы получите свои данные.

mysql_select_db("blahblah", $con); //connect to database..
$username =  basename(dirname(__FILE__));
$username = mysql_real_escape_string($username);
$sql = "SELECT * FROM links WHERE username='$username' LIMIT 10";
$res = mysql_query($sql) or trigger_error(mysql_error()." ".$sql);
while ($row = mysql_fetch_array($res)) {
  extract($rowsmall);
  $htmlsmall .= ""; //code goes here to format results
}
echo $htmlsmall;

Вот и все. Если вы все еще хотите повторить "Только 10 разрешено". (хотя почему) вы можете добавить эти 3 строки ниже

if (mysql_num_rows($res) == 10) {
  echo "Only 10 is allowed.";
}

Однако я не вижу в этом особого смысла.

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

0 голосов
/ 12 апреля 2011

Чтобы получить количество строк, возвращаемых в результате, вы должны использовать mysql_num_rows.

if (mysql_num_rows($checkres)>10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...