0

だから私は何か間違ったことをしている(PHPの新機能)。この問題は、phpで配列を操作した経験がないことに関係していると思う。

    $query2 = "SELECT * FROM birds where breed = '".$row['breed']."' and wing_span = '".$row['wing_span']."' and id != '".$row['id']."' limit 4";
    $s_query = mysql_query($query2);

    $theArray = array();

    $counter = 0;
    while($row3 = mysql_fetch_assoc($s_query)) {
        $counter = $counter + 1;
        array_push($theArray, $row3);
    }

    if($counter < 4) {
        $new_limit = 4 - $counter;

        $query5 = "SELECT * FROM birds where breed = '".$row['breed']."' and id != '".$row['id']."' limit ".$new_limit."";
        $s_query2 = mysql_query($query5);

        $counter = 0;
        while($row5 = mysql_fetch_assoc($s_query2)) {
            $counter = $counter + 1;
            array_push($theArray, $row5);
        }
    }

目標は、最初のクエリで最大4に達しない場合、MAXの差を使用して2番目のクエリを実行することです-制限としてカウントします。しかし、そのクエリを実行すると、既存の行($ s_query)に行($ s2_query)を追加しようとします。

この試みでは、新しい配列を作成し、要素をプッシュしていきました。それらも手動で組み合わせてみましたが(array_merge)、うまくいきませんでした。

編集 2つのクエリがあることを意図しています。ポイントは、最初のクエリで合計4つの結果が得られない場合は、2番目のクエリを実行して残りのスポットを埋めることです。

4

2 に答える 2

2

編集された回答decezeは、コメントでUNIONを提案しましたが、これはうまくいくはずです。試してみてください。

$query = "(SELECT *, 1 as SORY_QUERY1 FROM birds where breed = '".$row['breed']."' and wing_span = '".$row['wing_span']."' and id != '".$row['id']."') UNION (SELECT *, 2 FROM birds where breed = '".$row['breed']."' and id != '".$row['id']."') ORDER BY SORY_QUERY1 LIMIT 0, 4";

$theArray = mysql_fetch_array($s_query);

var_dump($theArray); //to debug

ところで、あなたはただ使うことができます

$theArray[] = $row5;

それ以外の

array_push($theArray, $row5);
于 2012-12-18T22:17:04.807 に答える
0

decezeが言ったように、UNIONでの1つのリクエストだけがあなたのニーズに最もよく合います。

ところで、範囲として制限を使用します

LIMIT 0, 4

よろしく、

于 2012-12-18T22:39:56.167 に答える