IT Community - Software Programming, Web Development and Technical Support

group_concat in MySQL

This is a discussion on group_concat in MySQL within the Database Support forums, part of the Web Development category; Yes Murali, i tried that in lower version. .... But there is someother way to get the result, this is somewhat ...


Go Back   IT Community - Software Programming, Web Development and Technical Support > Web Development > Database Support

Register FAQ Members List Calendar Mark Forums Read

Reply
 
Thread Tools Display Modes
  #11  
Old 07-18-2007, 03:38 AM
priyan priyan is offline
D-Web Sr.Programmer
 
Join Date: Mar 2007
Posts: 133
priyan is on a distinguished road
Default Re: Use on group_concat

Yes Murali, i tried that in lower version. ....

But there is someother way to get the result, this is somewhat similar to MySQL group_concat. It's seems to a big query.. just try this..

-- Create table for manipulation....

CREATE TABLE EMP (ID NUMBER, ENAME VARCHAR2(30), DEPT_ID INTEGER);
INSERT INTO EMP VALUES(1,'Raj', 10);
INSERT INTO EMP VALUES(2,'Kumar', 20);
INSERT INTO EMP VALUES(3,'Selvam', 10);
INSERT INTO EMP VALUES(4,'John', 10);
INSERT INTO EMP VALUES(5,'Smith', 10);

-- Query...

WITH DATA
AS
(
SELECT dept_id, ename, ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY ename) rnum,
COUNT(*) OVER (PARTITION BY dept_id) count FROM emp
)
SELECT dept_id, ltrim(sys_connect_by_path(ename,','),',') Result_String
FROM DATA WHERE rnum = count
start with rnum = 1
CONNECT BY PRIOR dept_id = dept_id and prior rnum = rnum-1
ORDER BY dept_id;


--------------------------------------------------------------------------------
DEPT_ID RESULT_STRING
--------------------------------------------------------------------------------
10 John,Raj,Selvam,Smith

20 Kumar
--------------------------------------------------------------------------------

However, this is not the same result as we get in mysql using the below mysql query.

SELECT group_concat(ename) as Result_String FROM EMP;

Result_String
---------------------------------------
John,Raj,Selvam,Smith,Kumar
__________________
Keep smiling...
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #12  
Old 07-19-2007, 06:59 AM
Murali Murali is offline
D-Web Master
 
Join Date: Feb 2007
Location: India-Chennai.
Posts: 385
Murali is on a distinguished road
Send a message via AIM to Murali
Default Re: Use on group_concat

Hi Priyan,

Yes its not similar to MYSQL GROUP_CONCAT().

Not a simple one using SELECT Query but the other way using a PL/SQL Block we can get the same result as per the MYSQL GROUP_CONCAT().

PHP Code:
SET SERVEROUTPUT ON;
DECLARE
vName          VARCHAR(100);
BEGIN
FOR I IN(SELECT ENAME FROM EMP)
LOOP
  
IF(vName IS NULL)THEN
     vName 
:= I.ENAME;
  ELSE
     
vName := CONCAT(CONCAT(vName,','),I.ENAME);
  
END IF;
END LOOP;  
DBMS_OUTPUT.PUT_LINE('The Names From Emp Table:'||vName);
END
HTML Code:
Output:
The Names From Emp Table: John,Raj,Selvam,Smith,Kumar.
PL/SQL procedure successfully completed.
__________________
-Murali..
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #13  
Old 07-21-2007, 05:25 AM
priyan priyan is offline
D-Web Sr.Programmer
 
Join Date: Mar 2007
Posts: 133
priyan is on a distinguished road
Default Re: Use on group_concat

Hi techies,

There is a new issue here about MySQL GROUP_CONCAT() function.

when i try to use the group_concat() function's result value with IN() Condition, i am not getting expected result set. Please find the ex given below.

eg.
SELECT dept_id, dept_name FROM dept_id
WHERE dept_id IN(SELECT GROUP_CONCAT(emp_dept_id) FROM emp_table)


This query is working but in the where condition, say for example the subquery returns (10,20,30,50) means it takes only the first value (10).

If any one come across this issue please reply the solution...
__________________
Keep smiling...
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #14  
Old 07-24-2007, 03:27 AM
Selena Selena is offline
D-Web Trainee
 
Join Date: Jul 2007
Location: Bangalore.
Posts: 9
Selena is on a distinguished road
Default Re: Use on group_concat

Hi,

As iam new to Database and atpresent working in ORACLE.
But i heard Oracle and Mysql differ with slight syntax only, so i will try this and tell you if i find any solutions to this.
__________________
Selna.
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #15  
Old 07-24-2007, 04:08 AM
Murali Murali is offline
D-Web Master
 
Join Date: Feb 2007
Location: India-Chennai.
Posts: 385
Murali is on a distinguished road
Send a message via AIM to Murali
Default Re: Use on group_concat

Hi Priyan/Selena,

Try this one,may be this could help u to solve your GROUP_CONCAT() Issue,

Quote:

DROP PROCEDURE IF EXISTS sp_test_groupconcat;
CREATE PROCEDURE sp_test_groupconcat()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT 'Just to Check the GROUP_CONCAT() Issue'
sp_test_groupconcat:
BEGIN
DECLARE vQuery TEXT;
DECLARE vQuery1 TEXT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK;END;

SET vQuery:= 'SELECT CAST(GROUP_CONCAT(table_id)AS BINARY) INTO @vId FROM table1';
SET @vQuery := vQuery;
-- SELECT @vQuery;
PREPARE vSqlQuery FROM @vQuery;
EXECUTE vSqlQuery;
-- DEALLOCATE PREPARE vSqlQuery;
SET vQuery1:= CONCAT('SELECT * FROM table2 WHERE table1_id IN (',@vId ,')');
SET @vQuery1 := vQuery1;
SELECT @vQuery1;
PREPARE vSqlQuery1 FROM @vQuery1;
EXECUTE vSqlQuery1;
DEALLOCATE PREPARE vSqlQuery1;
END sp_test_groupconcat;

CALL sp_test_groupconcat();
__________________
-Murali..
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #16  
Old 07-25-2007, 07:39 AM
priyan priyan is offline
D-Web Sr.Programmer
 
Join Date: Mar 2007
Posts: 133
priyan is on a distinguished road
Default Re: Use on group_concat

Hi Murali,

Yes, it's working with dynamic query but it will make impact on the query performance. Your SP handles the numerics in the group concat function. It would be more complicated if we handling strings in the group concat function with dynamic query.

There must be some solution for this issue !!!
__________________
Keep smiling...
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #17  
Old 07-26-2007, 03:47 AM
Murali Murali is offline
D-Web Master
 
Join Date: Feb 2007
Location: India-Chennai.
Posts: 385
Murali is on a distinguished road
Send a message via AIM to Murali
Default Re: Use on group_concat

Hi Priyan,

Have u noticed one thing.Try this

CREATE TABLE testing(id INTEGER,name VARCHAR(10));
INSERT INTO testing VALUES (1,'1000,1010');
SELECT * FROM table_name WHERE table_id IN (SELECT name FROM testing);

The above query returns only one record from the table as per the first value from the field.

This is because the difference as follows

SELECT * FROM table_name WHERE table_id IN ('1000,1010'), trims the string to the INTEGER and takes just the first value.so the query will work as
SELECT * FROM table_name WHERE table_id IN ('1000');

Might be the same thing happens in the GROUP_CONCAT().

As you said that it will be very tedious for handling strings, each values has to be concated as a string and to get the result from the query.

Hope believe there will be more flexible String Functions are expected in MYSQL5.1.
__________________
-Murali..
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #18  
Old 07-30-2007, 05:32 AM
Murali Murali is offline
D-Web Master
 
Join Date: Feb 2007
Location: India-Chennai.
Posts: 385
Murali is on a distinguished road
Send a message via AIM to Murali
Default Re: Use on group_concat

Hi,

Have u noticed one thing,

Code:
SELECT GROUP_CONCAT(Field_name) FROM table_name LIMIT 0,10;
But didn't get the expected result?
__________________
-Murali..
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #19  
Old 08-01-2007, 06:48 AM
Selena Selena is offline
D-Web Trainee
 
Join Date: Jul 2007
Location: Bangalore.
Posts: 9
Selena is on a distinguished road
Default Re: Use on group_concat

Hi murali,

I have tried your sp but have modified it as per my format of variable dec.

Here is the code,

drop procedure if exists sp_test;
create procedure sp_test()
sp_test:
begin
declare var_query text;
declare var_id integer;
SET var_query:= 'SELECT CAST(GROUP_CONCAT(mytable_id)AS BINARY) INTO var_Id FROM mytable';
prepare pre_query FROM var_query;
execute pre_query;
select var_id;
end sp_test;

I got the following Error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'var_query; execute pre_query;select var_id;end sp_test' at line 7

I have checked for my version and its
select version();
5.0.22-max-log

Could u help me what i have missed out here?
__________________
Selna.
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #20  
Old 08-02-2007, 01:19 AM
Murali Murali is offline
D-Web Master
 
Join Date: Feb 2007
Location: India-Chennai.
Posts: 385
Murali is on a distinguished road
Send a message via AIM to Murali
Default Re: Use on group_concat

Hi,

The problem is u cannot use the declared variable as in prepare statement command.

drop procedure if exists sp_test;
create procedure sp_test()
sp_test:
begin
declare var_query text;
declare var_id integer;
SET var_query:= 'SELECT CAST(GROUP_CONCAT(mytable_id)AS BINARY) INTO var_Id FROM mytable';
SET @var_query := var_query;
prepare pre_query FROM @var_query;
execute pre_query;
select var_id;
end sp_test;

CALL sp_test();

Now again u will get an error Undeclared variable: var_Id;, indicates that the dynamic sql query can save the value in the global/session variable inside the single query, i.e
'SELECT CAST(GROUP_CONCAT(mytable_id)AS BINARY) INTO @var_Id FROM mytable';

Can't be like this
'SELECT CAST(GROUP_CONCAT(mytable_id)AS BINARY) INTO var_Id FROM mytable';

So here is the code,

Quote:
drop procedure if exists sp_test;
create procedure sp_test()
sp_test:
begin
declare var_query text;
declare var_id integer;
SET var_query:= 'SELECT CAST(GROUP_CONCAT(mytable_id)AS BINARY) INTO @var_Id FROM mytable';
SET @var_query := var_query;
prepare pre_query FROM @var_query;
execute pre_query;
select @var_id;
end sp_test;
Quote:
Output:
1,2,3
__________________
-Murali..
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
MySQL lldcrb328 PHP Programming 2 02-15-2009 09:45 PM
I Can Help With MYSQL theseokit Database Support 9 01-21-2009 11:01 PM
php-mysql lekshmy PHP Programming 0 01-21-2009 10:58 PM
Why to use MySQL Amisha_Sharma Database Support 1 01-07-2009 07:56 PM
multiple group_concat problem fncll Database Support 4 11-30-2007 12:06 AM


All times are GMT -7. The time now is 07:14 PM.


Copyright ©2004 - 2007, DiscussWeb. All Rights Reserved.
Our Partners
One Way Moving Companies | Stamford Dentist | Euro Millions Lottery | Home Loans| Furniture

SEO by vBSEO 3.0.0