Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL断开顺序列表中的分组依据_Mysql - Fatal编程技术网

MySQL断开顺序列表中的分组依据

MySQL断开顺序列表中的分组依据,mysql,Mysql,我有一个SQL: SELECT c.name AS category_name, a.name, a.path, a.extension, a.width, a.height, a.server FROM categories c JOIN news_categories nc ON nc.categories_id = c.id JOIN news_attachments na ON nc.news_id = na.news_id JOI

我有一个SQL:

SELECT
    c.name AS category_name,
    a.name,
    a.path,
    a.extension,
    a.width,
    a.height,
    a.server
FROM categories c
JOIN news_categories nc ON nc.categories_id = c.id
JOIN news_attachments na ON nc.news_id = na.news_id
JOIN attachments a ON na.attachments_id = a.id
WHERE na.cover = 1
ORDER BY nc.news_id DESC
它告诉我一个正确的结果

+---------------+------------+---------------------+-----------+-------+--------+--------+
| category_name | name       | path                | extension | width | height | server |
+---------------+------------+---------------------+-----------+-------+--------+--------+
| Игры          | c54950f283 | a6f00bcd/b25/cfaf2e | jpg       |   450 |    416 |      1 |
| Игры          | fa4249e534 | a6f00bcd/b89/cfaf2e | jpg       |   400 |    250 |      1 |
| Игры          | d7b009eeb7 | a6f00bcd/bfa/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | 143cb7a38d | a6f00bcd/baa/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | a70451eca7 | a6f00bcd/bc6/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | 3ab8a0c051 | a6f00bcd/b5b/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | 206255a07a | a6f00bcd/b98/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | 86ef53ee1f | a6f00bcd/b93/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | a50367f861 | a6f00bcd/b32/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | dcfdd990c6 | a6f00bcd/b32/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | 5a3df9f4ad | a6f00bcd/b34/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | fb3ba0390d | a6f00bcd/b35/cfaf2e | jpg       |   200 |    140 |      1 |
| Игры          | 0e31ef118d | a6f00bcd/be5/cfaf2e | jpg       |   457 |    249 |      1 |
| Игры          | 82d41d9d62 | a6f00bcd/b97/cfaf2e | jpg       |   457 |    249 |      1 |
+---------------+------------+---------------------+-----------+-------+--------+--------+
但如果我们按添加
分组,那么它将不按顺序显示结果

SELECT
    c.name AS category_name,
    a.name,
    a.path,
    a.extension,
    a.width,
    a.height,
    a.server
FROM categories c
JOIN news_categories nc ON nc.categories_id = c.id
JOIN news_attachments na ON nc.news_id = na.news_id
JOIN attachments a ON na.attachments_id = a.id
WHERE na.cover = 1
GROUP BY c.id ORDER BY nc.news_id DESC
那么结果就是

+---------------+------------+---------------------+-----------+-------+--------+--------+
| category_name | name       | path                | extension | width | height | server |
+---------------+------------+---------------------+-----------+-------+--------+--------+
| Игры          | 82d41d9d62 | a6f00bcd/b97/cfaf2e | jpg       |   457 |    249 |      1 |
+---------------+------------+---------------------+-----------+-------+--------+--------+
但一定是这样

+---------------+------------+---------------------+-----------+-------+--------+--------+
| category_name | name       | path                | extension | width | height | server |
+---------------+------------+---------------------+-----------+-------+--------+--------+
| Игры          | c54950f283 | a6f00bcd/b25/cfaf2e | jpg       |   450 |    416 |      1 |
+---------------+------------+---------------------+-----------+-------+--------+--------+

错误在哪里?

按分组
将您的记录分组到
c.id
。因此,每个
c.id
值只能得到一行

在查询中,这个值有多行,MySQL将选择并显示一行:这里的最后一行

对于所需的输出,使用
限制1

如果希望在结果集中有多个
c.id
值(类别),则必须提供指向
第一行的平均值,通常是主键

SELECT *
FROM Table;

+---------------+------------+----------+
| pk            | category   | data     |
+---------------+------------+----------+
| 1             | red        | a        |
| 2             | red        | b        |
| 3             | red        | c        |
| 4             | red        | d        |
| 5             | red        | e        |
| 6             | red        | f        |
| 7             | green      | g        |
| 8             | green      | h        |
| 9             | green      | i        |
| 10            | green      | j        |
| 11            | blue       | k        |
| 12            | blue       | l        |
| 13            | blue       | m        |
| 14            | orange     | n        |
+---------------+------------+----------+



按分组
将您的记录分组到
c.id
。因此,每个
c.id
值只能得到一行

在查询中,这个值有多行,MySQL将选择并显示一行:这里的最后一行

对于所需的输出,使用
限制1

如果希望在结果集中有多个
c.id
值(类别),则必须提供指向
第一行的平均值,通常是主键

SELECT *
FROM Table;

+---------------+------------+----------+
| pk            | category   | data     |
+---------------+------------+----------+
| 1             | red        | a        |
| 2             | red        | b        |
| 3             | red        | c        |
| 4             | red        | d        |
| 5             | red        | e        |
| 6             | red        | f        |
| 7             | green      | g        |
| 8             | green      | h        |
| 9             | green      | i        |
| 10            | green      | j        |
| 11            | blue       | k        |
| 12            | blue       | l        |
| 13            | blue       | m        |
| 14            | orange     | n        |
+---------------+------------+----------+



您不正确地使用了
分组方式
,其他数据库管理系统都会拒绝您的查询。有关详细信息,请阅读此和此。@user2058653
GROUP BY
子句的意义是什么?我只需要每个类别一个结果,因为您错误地使用了
GROUP BY
,其他DBMS都会拒绝您的查询。有关详细信息,请阅读此和此。@user2058653“分组依据”
子句的意义是什么?我每个类别只需要一个结果idI每个类别只需要一个结果
id
LIMIT
将只显示一个结果,但类别可以是(视频、游戏、软件)我需要为每个类别id提供一张图片,其中包含该类别中的最后一条新闻。请参考我的最后一句话。你能举个例子吗?我每个类别只需要一个结果
id
LIMIT
将只显示一个结果,但类别可以是(视频、游戏、软件)我需要一个单一的图像为每个类别id与最后的新闻在这个类别。请参考我的最后一句话。你能给一个例子请?
SELECT *
FROM Table t
WHERE pk = (SELECT MAX(pk)
            FROM Table u
            WHERE u.category = t.category);

+---------------+------------+----------+
| pk            | category   | data     |
+---------------+------------+----------+
| 6             | red        | f        |
| 10            | green      | j        |
| 13            | blue       | m        |
| 14            | orange     | n        |
+---------------+------------+----------+