简体   繁体   中英

Get result from SQL Query

I've got a MySQL query based on a database of ship information, this includes a field ship_name and the key ship_id .

I've written a query which uses the current_ship_id of the page, and finds the next ship based on the alphabetical list of ship_names .

This all works fine, HOWEVER, I'm trying to create a link using the below code in the 'IF' statement.

header("Location: shipinfo.php?ship_id=$next_ship_id"); 

What I don't know how to do is define the variable next_ship_id . I tried the line:

$next_ship_id = ($ship_id);

In theory, I want to get the result of the query $sql (of which I know there is only one result) and find it's ship_id .

How do I do that please?

$sql = "    SELECT ship_infomation.ship_id
              FROM   ship_infomation
        INNER JOIN (
                  SELECT ship_name 
                    FROM   ship_infomation
                   WHERE  ship_id = $current_ship_id
                   ) As current_ship
                ON ship_infomation.ship_name < current_ship.ship_name
          ORDER BY ship_infomation.ship_name ASC
             LIMIT 1";

// echo "<br /><br />$sql<br /><br />";
$ships = mysql_query($sql, $ships) or die(mysql_error());
$row_ships = mysql_fetch_assoc($ships);
$totalRows_ships = mysql_num_rows($ships);
$next_ship_id = ($ship_id);
if ($totalRows_ships = 1)
{
    header("Location: shipinfo.php?ship_id=$next_ship_id");
}
else
{
    // remain on current page  
}

For the next ship use:

SELECT ship_id 
  FROM ship_infomation 
 WHERE ship_id = (SELECT min(ship_id) 
                    FROM ship_infomation 
                   WHERE ship_id > $current_ship_id) 
 LIMIT 1

For the previous ship use:

SELECT ship_id 
  FROM ship_infomation 
 WHERE ship_id = (SELECT max(ship_id) 
                    FROM ship_infomation 
                   WHERE ship_id < $current_ship_id) 
 LIMIT 1

And at your code change this:

$ships = mysql_query($sql, $ships) or die(mysql_error());
$row_ships = mysql_fetch_assoc($ships);
$totalRows_ships = mysql_num_rows($ships);
$next_ship_id = ($ship_id);
if ($totalRows_ships = 1)
{
    header("Location: shipinfo.php?ship_id=$next_ship_id");
}
else
{
    // remain on current page  
}

To this:

$ships = mysql_query($sql, $ships) or die(mysql_error());
$row = mysql_fetch_assoc($ships);
$totalRows_ships = mysql_num_rows($ships);
if ($totalRows_ships = 1)
{
    header("Location: shipinfo.php?ship_id=" . $row['ship_id']);
}
else
{
    // remain on current page  
}

For the next and previous, on your code:

$go = isset($_GET['go']) ? $_GET['go'] : 'next';
if ($go == 'next')
    $sql = "SELECT ship_id FROM ship_infomation WHERE ship_id = (SELECT min(ship_id) FROM ship_infomation WHERE ship_id > ". mysql_real_escape_string($current_ship_id) . ") LIMIT 1";
else
    $sql = "SELECT ship_id FROM ship_infomation WHERE ship_id = (SELECT max(ship_id) FROM ship_infomation WHERE ship_id < ". mysql_real_escape_string($current_ship_id) . ") LIMIT 1";

And on your URL have it like this for the next ship:

http://mysite.com/ships.php?current_ship_id=15&go=next

And like this for the previous:

http://mysite.com/ships.php?current_ship_id=15&go=previous

If the go is not specified it will go to the previous ship by default.


There is no more support for mysql_* functions, they are officially deprecated , no longer maintained and will be removed in the future. You should update your code with PDO or MySQLi to ensure the functionality of your project in the future.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM