Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 选择与组_CONCAT、分组依据、具有_Mysql_Select_Group By_Group Concat_Having - Fatal编程技术网

Mysql 选择与组_CONCAT、分组依据、具有

Mysql 选择与组_CONCAT、分组依据、具有,mysql,select,group-by,group-concat,having,Mysql,Select,Group By,Group Concat,Having,我有一个带有奇数id的表,我想为不同的票证id选择组合。我的问题是: SELECT ticket_id, GROUP_CONCAT(odd_id) as oddsconcat FROM ticket_odds GROUP BY ticket_id 它给了我以下信息: '28', '14472510,14472813,14472546,14472855,14472746,14472610,14472647' '29', '14471149,14471138,14471125,14475603'

我有一个带有奇数id的表,我想为不同的票证id选择组合。我的问题是:

SELECT
ticket_id,
GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
GROUP BY ticket_id
它给了我以下信息:

'28', '14472510,14472813,14472546,14472855,14472746,14472610,14472647'
'29', '14471149,14471138,14471125,14475603'
'30', '14471823,14471781,14471655,14471865,14471597,14471968,14471739,14471697,14471923'
'31', '14473874,14473814,14473862,14473838,14473790,14473802,14473826,14473850'
'32', '14471588,14472766,14471651,14471777,14471419'
'33', '14472647,14472605,14471650,14471734'
'34', '14471588,14472704,14471817'
'35', '14475279,14474499'
'282', '14472756,14472652,14472813'
'283', '14471588,14472766,14471419,14471777,14471651'
'284', '14474521'
'285', '14474529'
'286', '14474547'
'287', '14471134,14471199,14473636,14471242,14471398,14471237'
但是如果我使用Having函数,它不会给我结果。很明显,这给了我以下几点:

SELECT
ticket_id,
GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
GROUP BY ticket_id
HAVING oddsconcat = '14475279,14474499'
返回ticket_id 35,所有人都很高兴,代码运行良好,但如果oddsconcat大于此值,则不会返回任何值。例如:

SELECT
ticket_id,
GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
GROUP BY ticket_id
HAVING oddsconcat = '14473874,14473814,14473862,14473838,14473790,14473802,14473826,14473850'
我会将其改写为:

SELECT 
ticket_id, 
GROUP_CONCAT(DISTINCT odd_id ORDER BY odd_id ASC) as oddsconcat 
FROM ticket_odds 
GROUP BY ticket_id 
HAVING oddsconcat = .....
现在,
oddsconcat
中的输出是确定的,因为重复项被消除,并且项目是按升序排列的。
这将使匹配更加容易

假设
(票证id,奇数id)
组合是
唯一的
,这将为您提供包含这两个赔率(可能还有更多其他赔率)的所有票证:

这将给你所有包含这两个赔率的票(没有其他的):


什么是
组\u concat\u max\u len
?您的字符串是否超过此长度?'group\u concat\u max\u len','1024'但对我来说这并不重要,因为当我在没有语句的情况下进行选择时,它给出了我想要的内容,但在have子句中出现了问题:/OMG。谢谢你,伙计。如果你在这里,我会给你买些啤酒。在这里输入什么?例如,如果有3种类型的oddsconcat(假设字符串类型)a、b、c,现在我只想将仅具有a和b的concat列分组!好办法。但是由于很多原因我不能使用这个算法。无论如何谢谢:)我试过你的版本(第二个),但它不起作用。。如果我在(1,2)中有'odd_id',COUNT=2,它也会给我'1,2'和'1,2',,因为这两种情况下只需要'1,2'(你说“它给了我
1,2,
”是什么意思?
代表另一个数字?你有
NULL
值存储在
odd\u id
列中吗?表示任何数值。没有。我在odd\u id中没有NULL值。
SELECT
  ticket_id,
  GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
WHERE odd_id IN (14475279,14474499)
GROUP BY ticket_id
SELECT
  ticket_id,
  GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
WHERE odd_id IN (14475279,14474499)     --- list
GROUP BY ticket_id
HAVING COUNT(*) = 2                     --- size of list