小编Str*_*rry的帖子

GROUP_CONCAT有限制

我有表player-s在许多一对多的关系与skill-s

目标是通过单个查询列出球员及其"前3名技能".

小提琴

create table player(
  id int primary key
);

create table skill(
  id int primary key,
  title varchar(100)
);

create table player_skills (
  id int primary key,
  player_id int,
  skill_id int,
  value int
);
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT 
p.id,  
group_concat(s.title  SEPARATOR ', ') as skills

FROM player p
LEFT JOIN player_skills ps ON ps.player_id = p.id
LEFT JOIN skill s ON s.id = ps.skill_id

WHERE ps.value > 2
-- skills limit 3 some how ...
group …
Run Code Online (Sandbox Code Playgroud)

mysql group-concat

42
推荐指数
5
解决办法
6万
查看次数

MySQL - 仅从varchar列中选择数值

请考虑下表:

create table mixedvalues (value varchar(50));

insert into mixedvalues values 
('100'),
('ABC100'),
('200'),
('ABC200'),
('300'),
('ABC300'),
('400'),
('ABC400'),
('500'),
('ABC500');
Run Code Online (Sandbox Code Playgroud)

我怎么能写一个SELECT语句将只返回数字样值

100
200
300
400
500
Run Code Online (Sandbox Code Playgroud)

SQLFiddle

mysql sql varchar numeric

21
推荐指数
3
解决办法
6万
查看次数

从唯一的id mysql生成自动增量值

我在一个表中基于id收集具有不同类型值的相同类似数据:

 +------+---------------+-----------------+----------------+ 
 |  id  |   TransID     |     Amount      |   InsertDate   |
 +------+---------------+-----------------+----------------+ 
 |  1   |      1        |       12        |   19-03-2004   |
 |  2   |      2        |       9         |   20-03-2004   |
 |  3   |      3        |       4         |   21-03-2004   |
 |  4   |      1        |       12        |   22-03-2004   |
 |  5   |      2        |       9         |   23-03-2004   |
 |  6   |      3        |       4         |   24-03-2004   |
 |  7   |      1        |       12        |   25-03-2004   |
 +------+---------------+-----------------+----------------+ 
Run Code Online (Sandbox Code Playgroud)

当我根据TransID为1选择表时,我希望根据表的id为记录提供唯一的自动增量ID.

这该怎么做?结果就是这样

 +------+---------------+-----------------+----------------+--------------- 
 | …
Run Code Online (Sandbox Code Playgroud)

mysql

11
推荐指数
4
解决办法
894
查看次数

按字母顺序排列的字母表组在php中

我有一个会员表,我在那里存储有关会员的所有详细信息,包括其名称,电子邮件,电话等.我希望该名称将以字母顺序显示.如示例所示.

A
  Alan
  Alex
  Amar
  Andy

B
  Bob
  Brad

C
  Calvin
  Clerk
D

E
Run Code Online (Sandbox Code Playgroud)

我可以按照ASC的顺序按字母顺序对字段进行排序,但是如何将它们放入字母组中.

任何建议都是最受欢迎的.我正在使用PHP.

php mysql

9
推荐指数
1
解决办法
4467
查看次数

mysql - 按字段顺序无法正常工作

假设我有一个数据库,该表包含ide为1到20的行.

我想先返回ID为3,4,1的3行,然后返回其他行.这是我的代码:

    SELECT id
FROM prod
ORDER BY field( id, 3, 4, 1 ) 
LIMIT 20
Run Code Online (Sandbox Code Playgroud)

这是此代码的结果:

id
13 
17 
16 
15 
 7 
 6 
 5 
 2 
 3 
 4 
 1
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我需要先出现的3行最后显示,

如何将这3行添加到列表顶部?

谢谢

php mysql

9
推荐指数
1
解决办法
3268
查看次数

从不同的表创建值的加权和

我正在尝试创建一个学生名单,这些学生的行为在我们每个学校的年度组中都是统计上最差的.

我们有一个名为的表students.

然后,我们有行为flagsalertssanctions.

但是,不同类别的旗帜/警报/制裁被认为比其他类别更严重.这些与标签一起存储在各自的_categories表中,例如flag_categoriessanction_categories.flag然后该表将有一个名为的列Category_ID(alerts有点不同,因为它只是一个Type带有'A','C','P'和'S'值的字段).

如果我想查看显示特定年份组中标记最高的学生的数据,我会运行此查询:

SELECT
  CONCAT(stu.Firstname, " ", stu.Surname) AS `Student`,
  COUNT(f.ID) AS `Flags`
FROM `students` stu
LEFT JOIN `flags` f ON f.Student_ID = stu.id
WHERE stu.Year_Group = 9
GROUP BY stu.id
ORDER BY `Flags` DESC
LIMIT 0, 20
Run Code Online (Sandbox Code Playgroud)

如果我想向学生展示特定年份组中最危机警报,我会运行此查询:

SELECT
  CONCAT(stu.Firstname, " ", stu.Surname) AS `Student`,
  COUNT(f.ID) AS `Flags`
FROM `students` stu
LEFT JOIN `flags` f …
Run Code Online (Sandbox Code Playgroud)

mysql

9
推荐指数
1
解决办法
213
查看次数

MySQL如何获得表中所有所需字段的正确计数

假设我有一张桌子:

ID,City1,City2,City3,Country,....(不重要)

该应用程序询问人们他们希望住在哪里,让我们说法国.因此,必须添加至少一个城市,但您可以添加3个最大城市.

例如,我们在表数据中有:

ID    City1    City2    City3    Country   UserID
--------------------------------------------------
1     Paris      /        /      France      1
2     Paris    Nice       /      France      2
3     Paris    Nice       /      France      3
4     Nice     Paris    Lyon     France      4
5     Lyon     Paris    Nice     France      5
6     Cannes   Nice     Paris    France      6
7     Paris    Cannes   Lyon     France      7
--------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

现在,当有人点击法国时,我会在页面上显示所有用户.然后在上面的用户我想显示所有城市,例如巴黎(n).

所以,如果我写:

    select City1 as city, count(1) as num 
    from table_c 
   where Country = "France" group by City1;
Run Code Online (Sandbox Code Playgroud)

我得到巴黎(4),但我需要得到巴黎(7),因为我还要显示City2和City3,我不知道如何编写这样的SQL语句.

我尝试了很多SQL语句,但后来我得到了几次Paris(n)显示,haw可以做到这一点.如果可以的话?

php mysql sql

8
推荐指数
1
解决办法
155
查看次数

mysql选择case多列为

我想用这样的东西设置多个字段,我怎样才能使它工作?

Select TableId,
    CASE
        WHEN StartTime > Appt THEN
            Field AS Field_1
            FieldId AS FieldId_1
        WHEN StartTime BETWEEN Appt AND DATE_ADD(Appt, INTERVAL 1 MONTH) THEN
            Field AS Field_2
            FieldId AS FieldId_2
    END
FROM TableA;
Run Code Online (Sandbox Code Playgroud)

它不起作用,AS Field_1附近的语法错误.

mysql

7
推荐指数
2
解决办法
2万
查看次数

从mysql存储排名位置

我搜索了论坛,找到解决问题的方法.我的问题是我无法找到如何保存每场锦标赛的排名位置.我创建了两个表和一个如下所示的查询:竞争对手(cid int auto_increment主键,名称varchar(25),lastname varchar(25)); comps(compid int auto_increment primary key,tournement int,cid int,points int);

   select @rowno:= @rowno+1 as position,  rank.*
   from (
   select name,lastname,SUM(points) as pts,group_concat(points) as round FROM
   (select cid,tournament,points from comps 
    group by cid,tournament  order by points)total
    join competitors c on c.cid = total.cid
    cross join   (select @rowno := 0) r
    group by total.cid
    order by pts desc) rank
    order by pts desc
Run Code Online (Sandbox Code Playgroud)

这是 SQLFiddle演示

我想要实现的是,当用户点击竞争对手的个人资料时,每个锦标赛的位置都会显示如下:

Name: Competitor One
Tournament 1: 1st 100  pts
Tournament 2: 2nd  80  pts
Tournament …
Run Code Online (Sandbox Code Playgroud)

php mysql mysqli ranking

7
推荐指数
1
解决办法
240
查看次数

MySQL选择列如果不为空只

我有这个 mysql 代码:

SELECT firstname, lastname, age, gender from persons WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)

展示:

> firstname: Marlon 
> 
> lastname: Null
> 
> age: 26
> 
> gender: male
Run Code Online (Sandbox Code Playgroud)

我想做的是:

SELECT IF NULL DONT SELECT(firstname), IF NULL DONT SELECT(lastname), IF NULL DONT SELECT(age), IF NULL DONT SELECT(gender) from persons WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)

展示:

> firstname: Marlon 
> 
> age: 26
> 
> gender: male
Run Code Online (Sandbox Code Playgroud)

姓氏未显示,因为它为空

mysql advanced-search

7
推荐指数
1
解决办法
8487
查看次数

标签 统计

mysql ×10

php ×4

sql ×2

advanced-search ×1

group-concat ×1

mysqli ×1

numeric ×1

ranking ×1

varchar ×1