0

データベースには、作業中の 5 つのテーブルがあります。グループ連結を使用してデータベースから州の選択を開始するまで、すべてがうまく機能します。

これらは私のテーブルです:

  • main_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 が次の形式に該当する状態を選択する必要があるまで、すべてがうまく機能しました: State1、State2、State3

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;

上記のクエリを試してみましたが、次のエラーが表示されます。

SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

私は何が正しくないのですか?

4

1 に答える 1

0

kid相関サブクエリ内でalais を使用しているため、エラーが発生したようです。を に置き換える必要が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 構文を使用するように構文を変更し、テーブルにエイリアスを使用していることに気付くでしょう。

私が持っている他の提案は、サブクエリを使用してサブクエリに参加することです:

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-28T11:28:18.910 に答える