mysql procedure order by

Hi experts,
I have an urgent problem. i have  large table. I am trying to extract rows by a column named category and sort them by a numerical column in ascending order. I then want to insert these rows into  another table.
So I am using a procedure which fetches the set of category names and get rows for that cateogry and sorts them.
However the order by does not seem to work. It does not work in other in stored procedures.
I need to solve this right away. I would really appreciate any help on this
thanks
LVL 1
guyneoAsked:
Who is Participating?
 
Neil RussellConnect With a Mentor Technical Development LeadCommented:
Oops SORRY! My bad.
Heres a working example for MYSQL!

SELECT a.* FROM articles AS a
  LEFT JOIN articles AS a2  
    ON a.section = a2.section AND a.article_date <= a2.article_date
GROUP BY a.article_id
HAVING COUNT(*) <= 100;
0
 
Aaron TomoskyTechnology ConsultantCommented:
last I checked, you can't do:
insert into table1 (
   select * from table2 order by column1)

sql complains about the order by. There may be a really complicated way to make sure the data gets put into the table in the right order, but it's much much simpler to just add the order by onto the query when you are getting the data out of it.
0
 
Neil RussellTechnical Development LeadCommented:
You dont. Just have an index on the newly created table on column1 !
0
Learn to develop an Android App

Want to increase your earning potential in 2018? Pad your resume with app building experience. Learn how with this hands-on course.

 
Neil RussellTechnical Development LeadCommented:
Why would you want to physically sort the records to insert into another table? It serves no useful process at all.
0
 
guyneoAuthor Commented:
Actually I can't sort all the data in the final table by column1. It is more like order by category_column asc, numeric_column asc. Sort of like sorting by columns in excel.
@aron the query you suggest does not work. it perfectly displays when its is a normal query. However  it does not work once we add insert into like you suggested.
Anyway I exported the data into an outfile. Here is what making me go crazy. The data is the exported file is exactly what I need however when I import back into the table the sorting is gone. does it have to anything with the nature of the numerical column? its float
0
 
Aaron TomoskyConnect With a Mentor Technology ConsultantCommented:
ahh, google "dynamic sql" for more explanations of what I'm about to show you.

Make a stored proc called getsortedstuff() that takes a column name as it's input. Then use something like this for the code of the proc:

declare @sql varchar(8000);
set @sql = 'select * from table 1 order by ' + @sortcolumn;
exec @sql;

call it using getsortedstuff('category_column');
0
 
guyneoAuthor Commented:
@Neilsr.  you are right.  
I was trying to get the output anyway I can. i am  in a crunch.
My problem is:
I need to extract and output the  top 1000 winners in each category. The table has 80000 and 500 categories. Each row has name,category and score  (numeric). This is my actual goal.
Can you tell me a query that will do that.  
I would really appreciate that
0
 
guyneoAuthor Commented:
sorry I meant 80,000 rows
0
 
guyneoAuthor Commented:
and top 100 winners :) sorry
0
 
Neil RussellTechnical Development LeadCommented:
Ah thats easy :D
Read this article and all will become clear to you, I hope!
http://www.sqlservercurry.com/2008/09/select-top-n-rows-per-groupcategory.html 
0
 
guyneoAuthor Commented:
Thats seems sqlserver.  Will it work for mysql?
0
 
guyneoAuthor Commented:
Thanks Neilsr. That looks like what I need.
I don't have a single column key. but a combination of two columns.
I will try to translate it to my needs and let you know how it went.
0
 
guyneoAuthor Commented:
Awesome Neilsr. Works exactly for what I need.
aarontomosky: I didnot explore what you have suggested. I will check it out too thanks
0
 
guyneoAuthor Commented:
Thanks guys for being so responsive
0
All Courses

From novice to tech pro — start learning today.