2016-03-16 3 views
2

У меня 2 таблицы, которые имеют следующую структуру:Проблемы со сложным MySQL запросом

Таблица 1: ap_form_payments

CREATE TABLE IF NOT EXISTS ap_form_payments (
    afp_id int(11) unsigned NOT NULL AUTO_INCREMENT, 
    form_id int(11) unsigned NOT NULL, 
    record_id int(11) unsigned NOT NULL, 
    payment_id varchar(255) DEFAULT NULL, 
    date_created datetime DEFAULT NULL, 
    payment_date datetime DEFAULT NULL, 
    payment_status varchar(255) DEFAULT NULL, 
    payment_fullname varchar(255) DEFAULT NULL, 
    payment_amount decimal(62 , 2) NOT NULL DEFAULT '0.00', 
    payment_currency varchar(3) NOT NULL DEFAULT 'usd', 
    payment_test_mode int(1) NOT NULL DEFAULT '0', 
    payment_merchant_type varchar(25) DEFAULT NULL, 
    status int(1) NOT NULL DEFAULT '1', 
    billing_street varchar(255) DEFAULT NULL, 
    billing_city varchar(255) DEFAULT NULL, 
    billing_state varchar(255) DEFAULT NULL, 
    billing_zipcode varchar(255) DEFAULT NULL, 
    billing_country varchar(255) DEFAULT NULL, 
    same_shipping_address int(1) NOT NULL DEFAULT '1', 
    shipping_street varchar(255) DEFAULT NULL, 
    shipping_city varchar(255) DEFAULT NULL, 
    shipping_state varchar(255) DEFAULT NULL, 
    shipping_zipcode varchar(255) DEFAULT NULL, 
    shipping_country varchar(255) DEFAULT NULL, 
    payment_fee decimal(62 , 2) NOT NULL DEFAULT '0.00', 
    payment_method varchar(255) DEFAULT NULL, 
    PRIMARY KEY (afp_id), 
    KEY form_id (form_id , record_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

Таблица 2: ap_form_10242

CREATE TABLE IF NOT EXISTS ap_form_10242 (
    id int(11) NOT NULL AUTO_INCREMENT, 
    date_created datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    date_updated datetime DEFAULT NULL, 
    ip_address varchar(15) DEFAULT NULL, 
    status int(4) unsigned NOT NULL DEFAULT '1', 
    resume_key varchar(10) DEFAULT NULL, 
    element_1 text COMMENT 'Single Line Text', 
    element_2 decimal(62 , 2) DEFAULT NULL COMMENT 'Price', 
    element_3 varchar(11) NOT NULL DEFAULT '0' COMMENT 'Drop Down', 
    PRIMARY KEY (id), 
    KEY ip_address (ip_address), 
    KEY date_created (date_created) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

Обе таблицы имеют следующие данные:

Данные для таблицы ap_form_payments

INSERT INTO `ap_form_payments` (`afp_id`, `form_id`, `record_id`, `payment_id`, `date_created`, `payment_date`, `payment_status`, `payment_fullname`, `payment_amount`, `payment_currency`, `payment_test_mode`, `payment_merchant_type`, `status`, `billing_street`, `billing_city`, `billing_state`, `billing_zipcode`, `billing_country`, `same_shipping_address`, `shipping_street`, `shipping_city`, `shipping_state`, `shipping_zipcode`, `shipping_country`, `payment_fee`, `payment_method`) VALUES 
(1, 10242, 1, '787878', '2016-03-03 00:00:00', '2016-03-23 00:00:00', 'paid', 'SSSS', '14.00', 'usd', 0, NULL, 1, 'OOO', 'OOO', 'OOO', '1212', 'USA', 1, NULL, NULL, NULL, NULL, NULL, '0.00', 'Credit Card'), 
(2, 10242, 1, '787878', '2016-03-03 00:00:00', '2016-03-23 00:00:00', 'paid', 'SSSS', '14.00', 'usd', 0, NULL, 1, 'OOO', 'OOO', 'OOO', '1212', 'USA', 1, NULL, NULL, NULL, NULL, NULL, '0.00', 'Credit Card'), 
(3, 10242, 1, '787878', '2016-03-03 00:00:00', '2016-03-23 00:00:00', 'paid', 'SSSS', '14.00', 'usd', 0, NULL, 1, 'OOO', 'OOO', 'OOO', '1212', 'USA', 1, NULL, NULL, NULL, NULL, NULL, '0.00', 'Credit Card'); 

данных для таблицы ap_form_10242

INSERT INTO `ap_form_10242` (`id`, `date_created`, `date_updated`, `ip_address`, `status`, `resume_key`, `element_1`, `element_2`, `element_3`) VALUES 
(1, '2016-03-11 11:23:42', NULL, '127.0.0.1', 1, NULL, 'oo', '12.00', '1'), 
(2, '2016-03-11 11:23:42', NULL, '127.0.0.1', 1, NULL, 'oo', '12.00', '1'), 
(3, '2016-03-11 11:23:42', NULL, '127.0.0.1', 1, NULL, 'oo', '12.00', '1'); 

Когда я запускаю следующий запрос ниже со следующими именами столбцов ('PAYMENT_AMOUNT', 'payment_status', 'payment_id') все работаю нормально, но если я использую эти имена двух столбцов ('payment_fee', 'payment_method'), я получаю сообщение об ошибке

Неверный запрос:

select 
    id, 
    id as row_num, 
    date_created, 
    (select 
      payment_amount 
     from 
      ap_form_payments 
     where 
      form_id = '10242' and record_id = A.id 
     order by afp_id desc 
     limit 1) payment_amount, 
    ifnull((select 
        payment_status 
       from 
        ap_form_payments 
       where 
        form_id = '10242' and record_id = A.id 
       order by afp_id desc 
       limit 1), 
      'unpaid') payment_status, 
    (select 
      payment_id 
     from 
      ap_form_payments 
     where 
      form_id = '10242' and record_id = A.id 
     order by afp_id desc 
     limit 1) payment_id 
from 
    ap_form_10242 A 
WHERE 
    status = 1 
order by payment_fee asc 
LIMIT 0 , 15 

Ошибка я получаю: Query Failed: SQLSTATE[42S22]: Column not found: 1054 column 'payment_method' unknown in order clause

запрос, который проходит:

select 
    id, 
    id as row_num, 
    date_created, 
    (select 
      payment_amount 
     from 
      ap_form_payments 
     where 
      form_id = '10242' and record_id = A.id 
     order by afp_id desc 
     limit 1) payment_amount, 
    ifnull((select 
        payment_status 
       from 
        ap_form_payments 
       where 
        form_id = '10242' and record_id = A.id 
       order by afp_id desc 
       limit 1), 
      'unpaid') payment_status, 
    (select 
      payment_id 
     from 
      ap_form_payments 
     where 
      form_id = '10242' and record_id = A.id 
     order by afp_id desc 
     limit 1) payment_id 
from 
    ap_form_10242 A 
WHERE 
    status = 1 
order by payment_id asc 
LIMIT 0 , 15 

Может кто-нибудь мне помочь устранить эту проблему, пожалуйста?

Спасибо.

+0

** payment_id ** Для этого я просто пытался сделать его жирным шрифтом, чтобы увидеть, что здесь, где я заменить имя колонные –

+0

Исправьте форматирование, чтобы ваш вопрос читается. –

+0

Я сделал редактирование спасибо –

ответ

0

Фактическая ошибка: Unknown column 'payment_fee' in 'order clause'.

Причина в том, что payment_fee не находится в таблице ap_form_10242 или в любом из названных результатов подзапроса. Вы можете заказать по id, date_created, date_updated, ip_address, status, resume_key, element_1, element_2, element_3, payment_amount, payment_status или payment_id.

Чтобы заказать по другой таблице, вам потребуется соединение. Может быть, как это

select 
id, 
id as row_num, 
A.date_created, 
(select 
     payment_amount 
    from ap_form_payments 
    where form_id = '10242' and record_id = A.id 
    order by afp_id desc 
    limit 1) payment_amount, 
ifnull((select 
     payment_status 
    from 
     ap_form_payments 
    where 
     form_id = '10242' and record_id = A.id 
    order by afp_id desc 
    limit 1), 
    'unpaid') payment_status, 
(select 
    payment_id 
from 
    ap_form_payments 
where form_id = '10242' and record_id = A.id 
order by afp_id desc 
limit 1) payment_id 
from ap_form_10242 A 
join ap_form_payments 
on A.id = ap_form_payments.afp_id 
WHERE A.status = 1 
order by payment_method asc 
LIMIT 0 , 15; 
+0

Как добавить его в свой запрос? –

+0

Я отредактировал ответ, чтобы включить соединение, которое может быть правильным –

Смежные вопросы