MYSQL问题-获取唯一值

发布于 2024-09-30 15:02:47 字数 139 浏览 2 评论 0原文

假设我在 MySQL 中有这两个变量,

SET data1 = "1,2,3,apple,4,5";
SET data2 = "apple,orange,5";

如何获取这两个变量上出现的项目数?

Let's say I have these two variables in MySQL

SET data1 = "1,2,3,apple,4,5";
SET data2 = "apple,orange,5";

How do I get number of items that appears on those two variables?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笑,眼淚并存 2024-10-07 15:02:47

如果你确实需要在 MySQL 端执行此操作,你可以创建存储过程(或存储函数),其中:

  • 创建临时表(因为 MySQL 的存储例程无法处理数组,所以你必须将临时表用作数组)
  • create WHILE 循环使用 LOCATE 解析字符串()、LEFT()RIGHT() 函数(MySQL 手册:字符串函数)在临时表中插入每个值,
  • 从这个临时表中执行所需的选择(带有交集等)

但是这个解决方案确实是离优雅还差得很远。将标签存储在单独的表中(如上所述,每行一个标签)是更可取的。

If you really need to do this on MySQL-side you can create stored procedure (or stored function) in which:

  • create temporary table (because MySQL's stored routines can't handle arrays, so you have to use temporary table as an array)
  • create WHILE cycle to parse your strings using LOCATE(), LEFT() and RIGHT() functions (MySQL Manual: String functions) inserting every value in temporary table
  • perform needed select (with intersections and so on) from this temporary table

But this solution is really far from being elegant. Storing tags in separate table (as mentioned above, one tag per row) is much more preferable.

你爱我像她 2024-10-07 15:02:47

没有办法分解列表并计算项目数。以您的母语操作值来分解它的唯一方法:

php 中的示例:

$values = mysql_result();
echo count(explode(",", $values));

另一种方法是将所有标签放在单独的表中并将它们连接到数据透视表中,然后您可以执行以下操作:

select 
    count(*) 
from 
    items 
join 
    pivot on pivot.item_id = items.id 
join 
    tags on pivot.tag_id = tags.id 
where 
    item.id = {itemid}

There is no way to explode the list and count the items. The only way to to explode it in you native language manipulating the value:

Example in php:

$values = mysql_result();
echo count(explode(",", $values));

The other way is to put all tags in a separate table and joining them in a pivot table then you can do something like this:

select 
    count(*) 
from 
    items 
join 
    pivot on pivot.item_id = items.id 
join 
    tags on pivot.tag_id = tags.id 
where 
    item.id = {itemid}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文