2016-04-07 14 views
1
ModelName.all(:having=>"count(receipt_no)>1",:select=>"school_id,group_concat(id SEPARATOR ',') as f_ids,receipt_no,count(distinct id) as id_count,count(receipt_no) as rec_count",:conditions=>"receipt_no is not null",:group=>"receipt_no") 

Ausgang istGroup_concat zeigt nicht alle Werte mysql

+------------+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+ 
| receipt_no | school_id | id_count | f_ids                                            | rec_count | 
+------------+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+ 
| 1261  | 1783  | 2  | 557660,557661                                          | 2   | 
| 14/15-  | 1783  | 1209  | 68352,77056,113664,56320,68353,77057,113665,56321,68354,56322,68355,81923,173571,113667,56323,68356,94980,56324,68357,56325,68358,80390,56326,68359,80391,110599,56327,80392,885... | 1209  | 
| 15-  | 1783  | 112  | 344067,344068,344069,344070,344075,326923,373261,373262,345882,360218,344091,361755,347685,341542,347689,360233,351530,358705,352829,324674,341576,324684,360018,368469,371541,3... | 112  | 

Hier group_concat zeigt nicht alle Werte, sondern die Anzahl der Elemente, wie gleich der Zählung Eingang Nr. Angenommen, die Elemente in der Spalte f_ids haben mehr als 200 Zeichen und zeigen dann nicht alle Werte an. In einem anderen Fall wird es korrekten Wert zeigen

+0

'group_concat' von MySQL hat Beschränkung für String-Länge können Sie beziehen http://code.openark.org/blog/mysql/sql-trick-coming-group_concat-limitation-in-special-cases –

+0

Es sieht so aus, als ob die 200-Zeichen-Grenze durch welche Software Sie auferlegt werden Verwenden Sie erneut, um die Tabelle anzuzeigen. Das Standard-Limit von MySQL für 'GROUP_CONCAT' ist' 1024' Zeichen und es werden keine Ellipsen am Ende gesetzt. – Barmar

+0

Gibt es eine Möglichkeit, dieses Limit zu ändern? –

Antwort

0

ich die Lösung bekam

SET SESSION group_concat_max_len = 1000000; 

Führen Sie diesen Code in MySQL-Konsole, dann wird dieser Code Standard Group_concat Zeichenbegrenzung auf 1000000 Zeichen ändern.

Wenn Sie in Schienen-Konsole verwenden möchten, können Sie in diesem folgt verwenden

sql = "SET SESSION group_concat_max_len = 1000000" 
ActiveRecord::Base.connection.execute(sql) 

Bitte beachten Sie: Diese Konfiguration wird in dieser Sitzung nur funktionieren