0

我需要获得最后 20 个条目中的 8 个最佳结果。要获取最后 20 个条目,我使用以下查询:

SELECT *
FROM uitslagen
WHERE lid_id = '12' AND type = 'comp' AND invoer = 'ja'
ORDER BY seizoen DESC, wedstrijd_nr DESC, lid_strokeplay_score ASC
LIMIT 20

但是现在应该有一个子选择来获得 8 个最好/最低的 lid_strokeplay_score 结果。

4

3 回答 3

0

ekochergin 和 Stu 的答案似乎是一样的。但是当我使用答案时,会出现一些错误。这是我现在使用的代码:

$query = mysql_query("SELECT * FROM(
      SELECT * FROM uitslagen WHERE lid_id = '12' AND type = 'comp' AND invoer = 'ja' ORDER BY seizoen DESC, wedstrijd_nr DESC, lid_strokeplay_score ASC LIMIT 20
    )
    ORDER BY lid_strokeplay_score ASC
    LIMIT 8");
    $result = mysql_num_rows($query);
    while($object = mysql_fetch_object($query)){
        $par_score = ($object->lid_strokeplay_score - '54');
    echo "$object->seizoen - $object->wedstrijd_nr - $object->lid_naam - $object->lid_stableford_score - $object->lid_strokeplay_score - $par_score<br>";
    }

我得到的错误是:警告:mysql_num_rows() 期望参数 1 是资源,在第 6 行的 whs.php 中给出的布尔值

警告:mysql_fetch_object():提供的参数不是第 7 行 whs.php 中的有效 MySQL 结果资源

于 2021-03-25T21:57:28.260 回答
0

这取决于说“最佳结果”是什么意思。

如果您只需要从该数据集中获取前 8 条记录,您只需将 LIMIT 20 更改为 LIMIT 8:

SELECT * 
  FROM uitslagen 
 WHERE lid_id = '12' 
   AND type = 'comp' 
   AND invoer = 'ja' 
 ORDER BY seizoen DESC, wedstrijd_nr DESC, lid_strokeplay_score ASC 
 LIMIT 8

如果您需要重新排序这 20 行,最简单和最通用的方法是使用另一个 select 语句来覆盖这一行:

SELECT * 
  FROM (SELECT * 
          FROM uitslagen 
         WHERE lid_id = '12' 
           AND type = 'comp' 
           AND invoer = 'ja' 
         ORDER BY seizoen DESC, wedstrijd_nr DESC, lid_strokeplay_score ASC
        LIMIT 20)
ORDER BY /* here go all re-ordering criterias */
LIMIT 8
于 2021-03-25T21:04:22.213 回答
0

您的选择变成了所谓的 aderived table并且您将其用作父母的输入select

SELECT * FROM(
  SELECT * FROM uitslagen WHERE lid_id = '12' AND type = 'comp' AND invoer = 'ja' ORDER BY seizoen DESC, wedstrijd_nr DESC, lid_strokeplay_score ASC LIMIT 20
)
ORDER BY lid_strokeplay_score ASC
LIMIT 8
于 2021-03-25T21:38:14.340 回答