0

こんにちは私の問題は次のとおりです:私は結果ページに従って分割しました..問題はafisereaの結果です私は次のコードを持っています:

<?php
  include('ttt_files/paginare.php');  
  $rezultate_pe_pagina = '2';
  $statement = "`anunt_standard` where `activat` = 0  AND prs_prv='$filtru_p' ";
  /* Inceputul stabiliri functiei numaratorelor */
  $page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]);
  $limit = $rezultate_pe_pagina;
  $startpoint = ($page * $limit) - $limit;
  //Query pentru afisere si paginare
  /* Sfarsitul stabiliri functiei numaratorelor */
  $url = "{$server_url}anunturi/f/{$_GET['f']}/page/";
  echo "<div id='asezare_butoane'>".pagination($statement,$limit,$page,$url)."</div>";


  //afiseaza inregistrarile platite
  $query_pay = mysql_query("
                 SELECT * FROM {$statement} AND activat_plata = '1' 
                 AND sters = '0' ORDER BY data_adaugare DESC  LIMIT {$startpoint} ,
                 {$limit}");

  echo "
  <table border='0' width='950px' 
    style='border-collapse:separate; border-spacing:0px  5px;'>";         
  $i = 0;     
  while ($row = mysql_fetch_assoc($query_pay)) {
        include('continut_platit.php');              
  }             
  echo "</table>";
  //afiseaza inregistrarile normale
  $query = mysql_query("
                 SELECT * FROM {$statement} AND sters = '0' 
                 AND activat_plata = '0' 
                 ORDER BY data_adaugare DESC 
                 LIMIT {$startpoint} , {$limit}");

   echo "
       <table border='0' width='950px' 
          style='border-collapse:separate; border-spacing:0px 5px;'>";   
                 $i = 0;
      while ($row = mysql_fetch_assoc($query)) {
            include('continut.php');

       }

       echo "</table>";

       //afiseaza inregistrarile sterse
       $query_del = mysql_query("
              SELECT * FROM {$statement} 
              AND sters = '1' 
              ORDER BY data_adaugare DESC 
              LIMIT {$startpoint} , {$limit}");

       echo "<table border='0' width='950px' style='border-collapse:separate; border-spacing:0px 5px;'>";

                 $i = 0;

                   while ($row = mysql_fetch_assoc($query_del)) {
                        include('continut_sters.php');

                        }

                 echo "</table>";
?>   

問題は、各クエリの結果が2ずつ表示されるように設定されているため、ページごとに2つの結果が表示されないことです。つまり、合計6つの結果に貼り付けます。2-$ query_pay 2-$ query 2-$ query_delたとえば、2レコードのみを表示する場合は2レコードを追加すると最初のページになります。2レコードのみを表示する場合は2レコードのみを表示します。

    <?php
   function pagination($query, $per_page = 10,$page = 1, $url = '?'){  
           $query = "SELECT COUNT(*) as `num` FROM {$query}";
           $row = mysql_fetch_array(mysql_query($query));
           $total = $row['num'];
                $adjacents = "2";
           $page = ($page == 0 ? 1 : $page);
           $start = ($page - 1) * $per_page;                                       

           $prev = $page - 1;                                   
           $next = $page + 1;
                $lastpage = ceil($total/$per_page);
           $lpm1 = $lastpage - 1;

           $pagination = "";
           if($lastpage > 1)
           {  
                  $pagination .= "<ul class='pagination'>";
                                        //$pagination .= "<li class='details'>Pagina $page din $lastpage</li>";
                  if ($lastpage < 7 + ($adjacents * 2))
                  {  
                         for ($counter = 1; $counter <= $lastpage; $counter++)
                         {
                                if ($counter == $page)
                                   $pagination.= "<li><a class='current'>$counter</a></li>";
                                else
                                   $pagination.= "<li><a href='{$url}$counter/'>$counter</a></li>";                       
                         }
                  }
                  elseif($lastpage > 5 + ($adjacents * 2))
                  {
                         if($page < 1 + ($adjacents * 2))        
                         {
                                for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                                {
                                   if ($counter == $page)
                                          $pagination.= "<li><a class='current'>$counter</a></li>";
                                   else
                                          $pagination.= "<li><a href='{$url}$counter/'>$counter</a></li>";                        
                                }
                                $pagination.= "<li class='dot'>...</li>";
                                $pagination.= "<li><a href='{$url}$lpm1/'>$lpm1</a></li>";
                                $pagination.= "<li><a href='{$url}$lastpage/'>$lastpage</a></li>";       
                         }
                         elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
                         {
                                $pagination.= "<li><a href='{$url}1/'>1</a></li>";
                                $pagination.= "<li><a href='{$url}2/'>2</a></li>";
                                $pagination.= "<li class='dot'>...</li>";
                                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                                {
                                   if ($counter == $page)
                                          $pagination.= "<li><a class='current'>$counter</a></li>";
                                   else
                                          $pagination.= "<li><a href='{$url}$counter/'>$counter</a></li>";                        
                                }
                                $pagination.= "<li class='dot'>..</li>";
                                $pagination.= "<li><a href='{$url}$lpm1/'>$lpm1</a></li>";
                                $pagination.= "<li><a href='{$url}$lastpage/'>$lastpage</a></li>";       
                         }
                         else
                         {
                                $pagination.= "<li><a href='{$url}1/'>1</a></li>";
                                $pagination.= "<li><a href='{$url}2/'>2</a></li>";
                                $pagination.= "<li class='dot'>..</li>";
                                for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                                {
                                   if ($counter == $page)
                                          $pagination.= "<li><a class='current'>$counter</a></li>";
                                   else
                                          $pagination.= "<li><a href='{$url}$counter/'>$counter</a></li>";                        
                                }
                         }
                  }

                  if ($page < $counter - 1){

                 $pagination.= "<li><a href='{$url}$next/'>Urmatoarea</a></li>";
                                //$pagination.= "<li><a href='{$url}page=$lastpage'>Ultima</a></li>";
                  }else{
                         $pagination.= "<li><a class='current'>Urmatoarea</a></li>";
                                //$pagination.= "<li><a class='current'>Ultima</a></li>";
                        }
                  $pagination.= "</ul>\n";       
           }


                return $pagination;
        }
?>

上記の合計結果を数えて、nustiuポスターである条件を作成することを考えましたが、条件をどのように置くか。または、クエリ結果と番号の上に3を置くと、3:01に彼らの作業を収集して共有しますか?しかし、関数に行き、考え方がわからない


mysql_query("SELECT u.* FROM (
                                (SELECT * FROM anunt_standard WHERE `activat_plata`='1' AND `sters`='0' AND `activat`='0' ORDER BY data_adaugare DESC)
                                UNION
                                (SELECT * FROM anunt_standard WHERE `activat_plata`='0' AND `sters`='0' AND `activat`='0' ORDER BY data_adaugare DESC)
                                UNION
                                (SELECT * FROM anunt_standard WHERE `sters`='1' AND `activat`='0' ORDER BY data_adaugare DESC)
                                ) As u  LIMIT {$startpoint} , {$limit}")or die(mysql_error());

アイデアをありがとうございますが、問題は、希望する順序で表示されないことです...私が書いたものは何も意味しません。

ORDER BY data_adaugare DESC
4

1 に答える 1

0

SQL の UNION に精通している場合は、最後に LIMIT x,y を使用して単一のクエリを作成してみてください。UNION を使用したことがない場合は、http://www.w3schools.com/sql/sql_union.aspを確認してください。

次のようなものが必要です。

SELECT u.* FROM (
    (SELECT... 1st query)
    UNION 
    (SELECT... 2nd query)
    UNION
    (SELECT... 3rd query)
) AS u LIMIT {$startpoint} , {$limit} 

2 番目の投稿に応えて、UNION は一連の行で動作し、予測できない並べ替えを作成する可能性があります。UNION の最後に「ORDER BY」を付けます。

もう 1 つの選択肢は、各選択を別の選択に入れることです。これはばかげているように見えますが、並べ替えが機能します。UNION ALL では結果の重複が許可されるため、結合されたクエリのいずれかが同じ行を返す場合、それが繰り返されることに注意してください。

SELECT u.* FROM (
    SELECT * FROM (SELECT * FROM anunt_standard
                   WHERE `activat_plata`='1' AND `sters`='0' AND `activat`='0'
                   ORDER BY data_adaugare DESC) A
    UNION ALL
    SELECT * FROM (SELECT * FROM anunt_standard
                   WHERE `activat_plata`='0' AND `sters`='0' AND `activat`='0'
                   ORDER BY data_adaugare DESC) B
    UNION ALL
    SELECT * FROM (SELECT * FROM anunt_standard
                   WHERE `sters`='1' AND `activat`='0'
                   ORDER BY data_adaugare DESC) C
) As u LIMIT {$startpoint} , {$limit}
于 2013-02-21T23:17:00.710 に答える