2014-10-25 3 views
-2

Я просто хочу показать 20% пользователей из общего количества пользователей в моей базе данных. Это мой код в PHP, но я использую ограничение 3 для показа пользователей. Но как, если я хочу показать 20% от общего числа пользователей? Это означает, что мне приходится подсчитывать все строки в моем поле и умножать их на 0,2. Но это не сработает. Итак, это мой начальный код, который я еще не изменил.Общее количество записей в базе данных по ограничению

<table class="table table-striped table-hover "> 
     <thead> 
     <tr> 
     </tr> 
     </thead> 
     <tbody> 
     <?php 

     function getName($id){ 
     $d=mysql_fetch_array(mysql_query("SELECT * FROM infouser WHERE ID_User='$id' ")); 
     return $d['fullname']; 
    } 


    $sqlx= mysql_query("SELECT * FROM correlation WHERE ID_User = '".$_SESSION['iduser']."' ORDER BY result DESC limit 3"); 
    $i=0; 
    while(
     $datax=mysql_fetch_array($sqlx)) 
     {  
     $i++; 
    $ID_User=$data['ID_User']; 
    $u[$i]=$ID_User; 
    ?> 


     <tr> 
      <td><?php echo $i?></td> 
      <td><?php echo getName($datax['ID_User_Recommendation'])?></td> 
      <td><a href= "test.php?page_owner=<?PHP echo base64_encode(strip_tags($datax['ID_User_Recommendation']));?>" >View Profile</a></td> 
     </tr> 
    <?php } 
    ?> 
     </tbody> 
    </table> 

Я отредактировал свое последнее сообщение, чтобы все было ясно. Потому что я пытаюсь ответить, но все еще застрял и не работает. Поэтому здесь я даю свой код, который я не меняю. Пожалуйста, помогите, потому что это не просто, как я думаю. Спасибо вам заранее. Btw, этот файл я включил в другой файл, который этот еще файл уже включен в файл для подключения к базе данных.

+2

Вы, кажется, совсем запутался. Вы даже не запускаете первый запрос. –

+0

@GordonLinoff ya a lil bit, я пытался с phpmyadmin с 'SELECT *, COUNT (ID_User_Recommend) FROM 'corre'', и он показывает правильный ответ, это 6. Но, когда я пытался в своем php-коде и эхом переменная, она просто показывает синтаксис mysql, а не ответ. – user3528526

+0

Прежде всего, страница будет пустой, потому что ваш синтаксис неверен. Вы должны изменить настройку display_errors в файле php.ini (http://stackoverflow.com/a/10667432/977026) – Schiavini

ответ

0
$sql = new mysqli ('HOST','DB_USER','DB_PASS','DB'); //change to your values 
$rec_user =("SELECT ID_User_Recommend FROM correlation"); 
if ($result = $sql->query($rec_user)){ 
    $limiter = $result->num_rows; 
    $result->free(); 
} 
$limit = round($limiter * 0.2,0,PHP_ROUND_HALF_EVEN); 
$iduser = $_SESSION['iduser']; 
$sqlx= "SELECT * FROM correlation ORDER BY result DESC limit $limit"; 

if ($result=$sql->query($sqlx)) { 


while($datax=$result->fetch_assoc()) 
    {  

echo $datax['ID_User']; 
} 
} 
?> 

Это даст вам ряд из первого запроса, который MySQL может работать и будет выполняться запрос.

0

Прежде всего, страница будет пустой, потому что ваш синтаксис неверен. Вы должны изменить настройку display_errors в файле php.ini (https://stackoverflow.com/a/10667432/977026), чтобы отображались ошибки, и вы можете знать, что исправить.

Есть немало вещей неправильно:

  • Ваш первый запрос также не выполняется даже
  • Вы умножая текст запроса, который не имеет никакого смысла
  • В этом запросе , * не должно быть
  • Ваше время не закрывается, поэтому это синтаксическая ошибка
  • Вы также должны избегать использования расширения mysql и предпочитаете расширение mysqli.
  • Постарайтесь дать логические имена ваших переменных
  • быть очень строгим в использовании хорошего отступы, что очень помогает в сохранении кода после
  • Вы ничего не печатается, поэтому, конечно, страница будет пустой
  • Будьте внимательны при добавлении переменных в ваш запрос, это может быть использовано для взлома вашего сайта. Чтобы убедиться, что идентификатор действителен, вы можете применить его к целому. В противном случае, использование mysqli_real_escape_string (http://php.net/manual/en/mysqli.real-escape-string.php)

Попробуйте что-то вроде этого:

<?php 
$id = (int)$_SESSION['iduser']; 
$user_query = mysqli_query("SELECT COUNT(ID_User_Recommend) FROM correlation WHERE ID_User = $id"); 
if ($user_count = mysqli_fetch_array($user_query)) { 
    $limit = (int)$user_count[0]/5; 

    $list_query = mysql_query("SELECT * FROM correlation WHERE ID_User = $id ORDER BY result DESC limit $limit"); 
    $users = array(); 
    while($user = mysqli_fetch_assoc($list_query)) { 
     $users[] = $user['ID_User']; 
    } 
    print_r($users); 
    mysqli_free_result($list_query); 
} 
mysqli_free_result($user_query); 
?> 
+0

Это не даст никаких результатов, если $ user_count не разделяется с помощью 5 – baao

+0

Он округляется, поэтому если есть 4 записи, ни один из них не будет отображаться. Но если у вас 6, нужно отобразить. Желаемое поведение не описано в вопросе, но вы действительно можете добавить раунд или потолок к этой линии. – Schiavini

+0

Не уверен в этом, если в таблице 6 строк, 6/5 = 1,2 - означает, что вы передаете «... limit 1.2 "к запросу, и это вызовет ошибку. Или я что-то пропущу? – baao

Смежные вопросы