0

最初に一時テーブルを作成し、選択ステートメントからのデータを入力して、mysql データベース テーブルをクエリしています。

それをテストするには、既知のデータベース ID を使用して、次のレコードと前のレコードが正しく取得されるかどうかをテストします。

これは私の機能です

function get_next($id){
    $db = new PDO('mysql:host=localhost;dbname=world', 'root', '');
    $db->query("CREATE TEMPORARY TABLE nr AS SELECT ID,Name,Population FROM city WHERE id > $id ORDER BY ID LIMIT 1;");
    $orm = $db->query("SELECT * FROM nr WHERE ID > $id ORDER BY ID LIMIT 1;");
    $id = $orm->fetchColumn(0);
    if ($id !== false) {
        return $id;
    }
}
function get_previous($id){
    $db = new PDO('mysql:host=localhost;dbname=world', 'root', '');
    $db->query("CREATE TEMPORARY TABLE pr AS SELECT ID,Name,Population FROM city WHERE ID > $id ORDER BY ID LIMIT 1;");
    $orm = $db->query("SELECT * FROM pr WHERE ID < $id ORDER BY ID DESC LIMIT 1;");
    $id = $orm->fetchColumn(0);
    if ($id !== false) {
        return $id;
    }
}

nextレコードを正しく取得できますがprevious、前のレコードが現在のレコードであると表示されるため、レコードが間違っています。

前のクエリが間違っていますか?

4

4 に答える 4

1

一時クエリは ID より大きい ID を探しているため、次のクエリではそれより小さい ID は見つかりません。

于 2013-07-07T07:42:03.007 に答える
1

DESC関数からを削除する必要があります。get_previousこの行を私のものに置き換えます。

$orm = $db->query("SELECT * FROM pr WHERE ID < $id ORDER BY ID LIMIT 1;");
于 2013-07-07T07:45:05.310 に答える
0

一時テーブルは使用しません。ID のみに関心があるため、他の情報を取得する必要はありません。

# To retrieve the previous id:
SELECT MAX(id) FROM city WHERE id < $id
# alternative:
SELECT id FROM city WHERE id < $id ORDER BY id DESC LIMIT 1

# To retrieve the next id:
SELECT MIN(id) FROM city WHERE id > $id
# alternative:
SELECT id FROM city WHERE id > $id ORDER BY id ASC LIMIT 1
于 2013-07-07T08:00:28.963 に答える
0

前の行

SELECT * FROM table WHERE id < 1 ORDER BY id DESC LIMIT 1;

次の行

SELECT * FROM table WHERE id > 1 ORDER BY id ASC LIMIT 1;

これが役立つことを願っています...

于 2013-07-07T08:15:11.650 に答える