2015-12-16 2 views
2

Я использую плагин, который позволяет мне вытаскивать пользовательские значения полей из базы данных для заполнения полей ввода. Плагин представляет собой форму калькулятора, которая объединяет 3 пользовательских поля, каждый из которых назначен для поля ввода, используя мой первоначальный запрос.MYSQL Select If Query - WP пользовательские поля

Прямо сейчас, если я использую это как мой запрос работает нормально -

SELECT meta_value AS value FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%> 

Однако, если значение настраиваемого поля отсутствует она скидывает свои расчеты. Как сделать запрос выбора, чтобы вытащить значение, если оно присутствует, и если не дать ему значение 0?

Это запрос, я пытался -

if (exists (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'tr_postmeta' AND COLUMN_NAME = 'pa_meta_debt')) 
begin 
    SELECT meta_value AS value FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%> 
end 

Это не работает, хотя, как я могу изменить это?

+0

Является ли meta_value числовым в этом конкретном контексте? Ожидаете ли вы вернуть 1 строку или несколько строк с указанным выше запросом? – Shadow

+0

Да, значение meta все числовое. Что касается строк Im not sure, Im не слишком хорошо знаком с MySql – Rich

+0

Если вы запустите свой запрос, сколько строк оно вернется (в случае, если есть удар): 1 или больше? – Shadow

ответ

2

Если значения являются числовыми (или могут быть преобразованы в числовой) и только одна строки могут быть возвращены в запросе не более, а затем использовать sum() агрегатной функции с ifnull() или coalesce(). Если вы используете sum(), то ваш набор результатов всегда будет иметь 1 строку. Если соответствующие строки не найдены, то sum() вернет значение null, которое должно быть преобразовано в 0 с использованием ifnull() или coalesce().

SELECT coalesce(sum(meta_value),0) AS value 
FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%> 

У вас также есть возможность не меняя свой запрос, и вы либо обрабатывать ни одна строка не возвращается статус в коде обработки или выполнения запроса

SELECT count(*) AS noofrows 
FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%> 

первый, который скажет вам, если есть соответствующие записи. Я бы использовал этот последний подход, если ваш запрос может вернуть более 1 строки.

+0

Спасибо. Первый код, который я использовал, и он работает по мере необходимости. Он не исправил мою проблему с плагином :(но он правильно ответил на мой вопрос и функцию. – Rich

-1

Вы можете использовать этот

Select Coalesce((SELECT meta_value AS value FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%> Limit 1),0) As meta_value 
+0

Спасибо, но не работает. В настоящее время значение в этом поле составляет 800 000, но теперь он ничего не возвращает с помощью вашего кода. Есть идеи? – Rich

+0

Если запрос не возвращает никаких строк, то слияние() не будет выполняться. Вот почему я спросил о типе данных и количестве строк. – Shadow

+0

Вы помещаете запрос внутри оператора if? Если да, то десять, если оператор if был ложным. Используйте код без инструкции if. –