为了账号安全,请及时绑定邮箱和手机立即绑定

我可以在临时表变量上使用 substring() 吗?

我可以在临时表变量上使用 substring() 吗?

PHP
慕的地8271018 2023-09-08 21:46:59
我使用以下方法按每个域组的最高分对数据进行排序:SELECT * from `Inputs` t order by (select max(`score`) from `Inputs` t1 where t1.`domain`=t.`domain`) desc, `score` desc结果是:query domain url score  a www.google.com www.google.com/a  3  a www.google.com www.google.com/b  1a www.facebook.com www.google.com/c 2 我不想将域和 url 存储在数据库中,而是想使用以下方法将域计算为查询中 url 的函数:SUBSTRING(`url` from 1 for locate('/',`url` ,10)-1) as `domain`如果可能的话,我将能够使用少一列来实现相同的条目排序(如上所述):query url score  a www.google.com/a  3  a www.google.com/b  1a www.google.com/c 2 如果可能的话,有谁知道这是如何实现的?我还没有在 stackoverflow 上找到有关对临时表使用列别名的其他问题。我尝试嵌套另一个查询,但没有运气:SELECT *, SUBSTRING(`url` from 1 for locate('/',`url` ,10)-1) as `domain` from `Inputs` torder by (select max(`score`), (select SUBSTRING(`url` from 1 for locate('/',`url` ,10)-1) as `domain` from `Inputs` t1 ) from `Inputs` t1 where t1.`domain`=t.`domain`) asc, `score` asc
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您可以使用 [substring_Index][1] 达到此目的,但您最终必须更改 CHAR 的数据类型或位点


实际上不需要该函数使代码更具可读性


架构(MySQL v5.7)


CREATE TABLE Inputs (

  `query` VARCHAR(1),

  `domain` VARCHAR(16),

  `url` VARCHAR(16),

  `score` INTEGER

);


INSERT INTO Inputs

  (`query`, `domain`, `url`, `score`)

VALUES

  ('a', 'www.google.com', 'www.google.com/a', '3'),

  ('a', 'www.google.com', 'www.google.com/b', '1'),

  ('a', 'www.facebook.com', 'www.google.com/c', '2');

  

CREATE FUNCTION geturl (_url CHAR(255))

       RETURNS CHAR(255) DETERMINISTIC

       RETURN SUBSTRING_INDEX(_url, "/", 1);

查询#1


select `query`, `domain`, `url` , `score`

from Inputs t

order by 

    (select max(score) from Inputs t1 where geturl(t1.url) = geturl(t.url)) desc,

    score desc;


| query | domain           | url              | score |

| ----- | ---------------- | ---------------- | ----- |

| a     | www.google.com   | www.google.com/a | 3     |

| a     | www.facebook.com | www.google.com/c | 2     |

| a     | www.google.com   | www.google.com/b | 1     |


查看完整回答
反对 回复 2023-09-08
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信