在Mysql查询中使用GROUP_CONCAT
我在我的数据库中有五个表与我一起工作。一切正常,直到我开始使用组concat从数据库中选择状态。在Mysql查询中使用GROUP_CONCAT
这些都是我的表:
- main_jobs
- sub_jobs
- 类别
- 状态
- state_job_relationship
我的表创建的片段
create table if not exists category (
id int(3) not null auto_increment,
parent int(5) not null,
name varchar(255) not null,
description text,
slug varchar(255),
level int (3),
PRIMARY KEY (id, slug));
create table if not exists state (
id int(4) not null auto_increment,
country_id int(11) not null,
name varchar(255) not null,
PRIMARY KEY (id),
FOREIGN KEY (country_id) REFERENCES country (id))";
create table if not exists state_job_relationship (
id int(4) not null auto_increment,
state_id int(4) not null, FOREIGN KEY (state_id) REFERENCES state (id),
job_id int(11) not null, FOREIGN KEY (job_id) REFERENCES sub_jobs (id),
PRIMARY KEY (id));
create table if not exists main_jobs (
id int not null auto_increment, primary key(id),
company_name varchar(255),
job_title varchar(255));
create table if not exists sub_jobs (
id int not null auto_increment, primary key(id),
parent_id int(11) not null, FOREIGN KEY (parent_id) REFERENCES main_jobs (id),
title varchar(255),
description text not null,
category int (3), FOREIGN KEY (category) REFERENCES category (id)
);
这是我想选择什么:
从子工作表中的职位名称,与相应的公司名称,并从main_jobs和类别表等细节。
所有运作良好,直到我需要选择每个sub_job属于这一格式的状态:状态1,状态2,状态3
select sub_jobs.id as kid, main_jobs.id as parentid,
company_name, sub_jobs.description, sub_jobs.title,
job_title, category.name as ind,
DATE_FORMAT($column_date,'%a, %e %b %Y %T') as d,
(select group_concat(name seperator ', ')
from state_job_relationship, state
where job_id= kid
and state.id=state_job_relationship.state_id
group by state.id) states
from sub_jobs, category, main_jobs
where category.id=sub_jobs.category
and main_jobs.id=sub_jobs.parent_id
order by featured desc , $table.id desc
limit 100;
尝试上述查询,但它显示这个错误:
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 'seperator ', ') from state_job_relationship, state where job_id= kid and state.i' at line 1
请问我什么不对?
看起来您的错误是因为您在相关子查询中使用了alais kid
。您应该将kid
替换为sub_jobs.id
。您还有seperator
拼写错误。
所以,你的代码将是:
select s.id as kid,
m.id as parentid,
company_name,
s.description,
s.title,
job_title,
c.name as ind,
DATE_FORMAT($column_date,'%a, %e %b %Y %T') as d,
(select group_concat(name SEPARATOR ', ')
from state_job_relationship
inner join state
on state.id=state_job_relationship.state_id
where job_id= s.id
group by state.id) states
from sub_jobs s
inner join category c
on c.id=s.category
inner join main_jobs m
on m.id=s.parent_id
order by featured desc , $table.id desc
limit 100;
你会发现,我改变了你的语法使用ANSI JOIN语法,我使用aliasas的表。
其他建议,我将使用子查询,并加入到子查询:
select s.id as kid,
m.id as parentid,
company_name,
s.description,
s.title,
job_title,
c.name as ind,
DATE_FORMAT($column_date,'%a, %e %b %Y %T') as d,
st.states
from sub_jobs s
inner join category c
on c.id=s.category
inner join main_jobs m
on m.id=s.parent_id
left join
(
select job_id, state.id, group_concat(name SEPARATOR ', ') states
from state_job_relationship
inner join state
on state.id=state_job_relationship.state_id
group by state.id, job_id
) st
on st.job_id= s.id
order by featured desc , $table.id desc
limit 100;
非常感谢您帮助我并格式化我的问题。上面的查询显示此错误:子查询返回多于一行 – 2013-02-28 11:42:50
@OguguaBelonwu请参阅我的编辑 – Taryn 2013-02-28 11:45:45
非常感谢!它如此接近!但是,即使我预期不仅仅是一个国家,它也只会显示每个子工作的状态。 – 2013-02-28 15:59:42
请正确格式化你的问题,尤其是你试一下查询。它也会鼓励更多的人来帮助你。 – fancyPants 2013-02-28 11:32:05