0

投稿とセクションの2つのテーブルがあります。最後の10件の投稿WHEREsection= 1を取得したいのですが、10件の結果をさまざまな場所で使用します。私は関数を作ります:

     function sectionposts($section_id){
mysql_set_charset('utf8');
$maxpost1 ="SELECT max(id) from posts WHERE section_id = $section_id ORDER BY ID DESC LIMIT 20";
$maxpost12 =mysql_query($maxpost1);
while ($maxpost_rows = mysql_fetch_array($maxpost12 ,MYSQL_BOTH)){
$maxpost2 = $maxpost_rows[0];
}
$query = "SELECT * FROM posts WHERE id = $maxpost2";
$query2 = mysql_query($query);
return $query2;
}
$query2 = sectionposts(6);
while ($rows = mysql_fetch_array($query2)){
echo $rows['title'] . "<br/>" . "<br/>";
echo $rows['id'] . "<br/>" . "<br/>";
echo $rows['image_section'] . "<br/>";
echo $rows['subject'] . "<br/>";
echo $rows['image_post'] . "<br/>";
}

これらの10の結果をどのように取得することができますが、それらをさまざまな場所で使用し、1から10に配置しておくことができます。

これは古いケースであり、私はそれを解決しましたが、別の問題を見つけました。クライアントが投稿をid = 800として削除した場合、「DBにid = 800がないため」、最大IDから$NUMを引いた値を取得するとそれから、この操作はid = 800に等しくなければならないので、ここでプログラミングの間違いがあります。どうすればそのようなことを処理できますか。

    function getmax_id_with_minus ($minus){
    mysql_set_charset('utf8');
    $maxid ="SELECT max(id) FROM posts";
    $maxid1 =mysql_query($maxid);
        while ($maxid_row = mysql_fetch_array($maxid1)){
                $maxid_id = $maxid_row['0'];
                $maxid_minus = $maxid_id - $minus;
                }
    $selectedpost1 = "SELECT * FROM posts WHERE id = $maxid_minus";
    $query_selectedpost =mysql_query($selectedpost1);
        return ($query_selectedpost);

}
<?php 
$ss = getmax_id_with_minus (8);
while ($rows = mysql_fetch_assoc($ss)){
$main_post_1 = $rows;
?>

とにかく「本当に」ありがとうございました:)!

4

3 に答える 3

0

それらを配列に格納したいようです。

 $posts = array(); //put this before the while loop. 
 $posts[] = $row; //put this in the while loop
于 2012-09-09T01:16:32.957 に答える
0

代わりにこれを試して、無意味なコードをたくさん節約してください。

$sql = "SELECT * FROM posts WHERE section_id=$section_id HAVING bar=MAX(bar);"
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
echo ...;
echo ...;

このhaving句を使用すると、2つのクエリバージョンに固有のレイシーさを伴わずに、1回の操作で最大レコードを見つけることができます。また、同じIDを持つ複数のレコードがテーブルを汚染することを許可しない限り、while()ループを削除すると、状況がはるかに読みやすくなります。

于 2012-09-09T02:32:19.243 に答える
0

投稿されたコードに関するいくつかの考え:

  • 何よりもまず、関数は非推奨になり、SQLインジェクションに対して脆弱であるため、mysql_関数の使用を停止する必要があります。
$maxpost1 ="SELECT max(id) from posts WHERE section_id = $section_id ORDER BY ID DESC LIMIT 20";
  • 、、、 ...単一の行のみを返す関数の場合SELECT MAX、またはは必要ありません。MINCOUNTAVGORDER BYLIMIT

  • を要求しているだけMAX(id)なので、次のようにクエリを組み合わせることで作業を節約できます。

SELECT * FROM posts 
WHERE id = (SELECT MAX(id) from posts WHERE section_id = $section_id)

あなたがやろうとしていることを理解している場合(私が間違っている場合は訂正してください)、関数は次のようになります。

function sectionposts($section_id) {
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");

    $stmt = mysqli_prepare($link, "SELECT title, id, image_section, subject, image_post FROM posts " 
        . "WHERE section_id = ? ORDER BY id DESC LIMIT 10");
    mysqli_stmt_bind_param($stmt, $section_id);
    return mysqli_query($link, $stmt)
}

$result = sectionposts(6);
while ($row = mysqli_fetch_assoc($result)) {
    echo $rows['title'] . "<br /><br />";
    echo $rows['id'] . "<br /><br />";
    echo $rows['image_section'] . "<br />";
    echo $rows['subject'] . "<br />";
    echo $rows['image_post'] . "<br />";
}
于 2012-09-09T02:45:17.250 に答える