1

我正在尝试从 MYSQL 数据库中选择特定的数据行

数据库如下

Count   id     Startstation      stp
1      A1234   Nottingham         o
2      A1234   Nottingham         p
3      B2345   Nottingham         p
4      C6789   Leeds              o

我想选择所有诺丁汉站,但不重复相同的 ID。o 的 stp 代码也优先于 p 的 stp。

所以我正在寻找如下输出:

A1234   Nottingham         o
B2345   Nottingham         p

这是我一直在尝试使用的代码,但我无法让它工作

require('connect_db.php');
mysqli_select_db($mysql_link,"timetable");               
$q="select * from (SELECT id,startstation, stp, ROW_NUMBER() OVER (PARTITION BY id ORDER BY stp  DESC) rnk FROM railtest WHERE startstation="Nottingham") where rnk = 1";

$r=mysqli_query($mysql_link,$q);
if ($r)
{                                       
while ($row=mysqli_fetch_array($r,MYSQLI_ASSOC))
{
echo $row['startstation'] . " " . $row['id']." ".$row['stp'];
echo "<br>";                
}               
}
else {echo '<p>'.mysqli_error($mysql_link).'</p>' ;}                        
mysqli_close($mysql_link);

我的 select 语句出现 Parse 错误

希望有人可以提供帮助

谢谢

4

2 回答 2

1
SELECT `id`,`startstation`,min(`stp`) as stp
FROM `railtest`
WHERE `startstation`='Nottingham'
GROUP BY `id`, `startstation`

对相同的两列进行分组,因为op您可以选择min值之前。显然,当 stp 有两个值时,这很有效,您可以按优先级按字母顺序排列它们,或者使用相关的子查询来获取 stp 的值。

于 2013-09-13T21:41:45.090 回答
0
SELECT `id`,`startstation`, `stp`
FROM `railtest`
WHERE `startstation`='Nottingham'
GROUP BY `id`
ORDER BY `stp` ASC
于 2013-09-13T21:44:31.520 回答