0

したがって、すべてのアイテムをmysql_fetch_arrayに返すというクエリがあります。これで、別のクエリを記述して、必要なアイテムを個別のクエリに選択することができますが、$ _ GETに依存して、より大きなクエリからフィルタリングする方法はありますか?

したがって、英語では、ユーザーは?id = 1のハイパーリンクからアクセスし、しばらくの間、すべての値を取得しますが、リストには$_GET['id']アイテムのみを表示します。

<?php //give ma all values but only echo out list of the $_GET['id'] in the url
  while ($row = mysql_fetch_array($result) {
    $id = $rowvideo["id"];
    $title = $rowvideo["title"];
    $length = $rowvideo["length"];
}
echo("<li><a href='#'>". $title." " .$length. "</a></li>");
?>

これが理にかなっていることを願っています。皆さん、ありがとうございました。

4

3 に答える 3

1

2 番目のクエリで必要なものだけを取得したくない場合if-statementは、ループ内の simple-が機能するはずです。

<?php
$getId = isset($_GET['id']) ? $_GET['id'] : false;
//give ma all values but only echo out list of the $_GET['id'] in the url
while ($row = mysql_fetch_array($result)) {
    $id = $row["id"];
    $title = $row["title"];
    $length = $row["length"];

    if ($id == $getId) {
        echo("<li><a href='#'>". $title." " .$length. "</a></li>");
    }
}
?>

すべての反復中$getIdに使用する必要がないように、ループの外側で宣言したことに注意してください。isset()設定されているかどうかを確認せずに使用しようとすると、警告がスローされます- (そのレベルが有効になっている状態で)オンになっているとundefined index仮定します。error_reporting

array_filter()または、すべてを解析した後、データに対してPHP を使用することもできます。

$results = array();
while ($row = mysql_fetch_array($result)) $results[] = $row;
if (isset($_GET['id'])) {
    $filtered = array_filter($results, function($element) use ($_GET['id']) { return ($element['id'] == $_GET['id']); });
    $results = $filtered;
}
foreach ($results as $result) {
    echo("<li><a href='#'>". $result['title']." " .$result['length']. "</a></li>");
}

私の個人的な意見は、より効率的で、2 番目のクエリを作成することです。もちろん、an が指定されている場合、実際にはすべての結果が必要ではないことを前提としていidます。それは次のように簡単です:

if (isset($_GET['id']) && is_numeric($_GET['id'])) {
    $query = 'SELECT id, title, length FROM table WHERE id=' . (int)$_GET['id'];
} else {
    $query = 'SELECT id, title, length FROM table';
}
// your existing code as-is
于 2012-08-13T15:24:29.197 に答える
0
<?php //give ma all values but only echo out list of the $_GET['id'] in the url
  while ($row = mysql_fetch_array($result)) {
    $id = $rowvideo["id"];
    $title = $rowvideo["title"];
    $length = $rowvideo["length"];
    if ($id == $_GET['id']) { // or even ===
      echo("<li><a href='#'>". $title." " .$length. "</a></li>");
    }
  }
?>
于 2012-08-13T15:24:07.313 に答える
0

ここでもう少し明確にします:

これにより、id=xxx を指定することにより、URL で ID によるフィルター処理が可能になります。IF xxx は正の整数です。したがって、「bob」または -1 の id は結果をフィルタリングせず、すべての結果を提供します

$filter=false;
if(isset($_GET['id']))
{
    $filter_id=intval($_GET['id']);
    if($id>0) $filter=true;
}

while($row = mysql_fetch_array($result))
{
    if( (!$filter) || ( ($filter) && ($filter_id==$row['id']) ) )
    {
        $id = $row["id"];
        $title = $row["title"];
        $length = $row["length"];

        // do other stuff here
    }
}

また、結果をフェッチするために使用した配列であるため、$rowvideo を $row に変更しました。

于 2012-08-13T15:38:17.047 に答える