2016-10-09 5 views
0

Мне нужна помощь с SQL-запросом. Я хочу показать строки из таблицы test_related_orders, где текущий идентификатор пользователя равен user_id в моей таблице test_related_orders, а где order_unlock_time (из моей таблицы) - < = отметка времени acutal. Пока здесь все работает нормально. Но теперь это осложняется. Мне также нужно проверить/ограничить в моей таблице wp_posts, если есть post_author, равный моему test_related_orders user_id, у которого есть уже существующий номер_порядка, такой же, как и из моего идентификатора__собрания__собрания__собрания__события_.Нужна помощь при написании SQL-запроса для оператора select

Если это утверждение верно, будут показаны связанные строки из моих test_related_orders. Если это утверждение ложно, не должно быть связанных строк.

(Так что, когда я удаляю заказ в WooCommerce интерфейсе оператор should'nt возвращает строку для этой записи.)

Вот мой существующий код:

$user_id = get_current_user_id(); 
 
//Timestamp for current system time 
 
date_default_timezone_set("Europe/Berlin"); 
 
$timestamp = date("Y-m-d H:i:s"); 
 
//Database Query 
 
$abfrage = "SELECT * FROM test_related_orders WHERE user_id = '$user_id' AND order_unlock_time <= '$timestamp'"; 
 

Я думаю, что могу использовать INNER JOIN, и я попробовал его здесь:

INNER JOIN wp_posts ON '$user_id' = post_author WHERE....

но это к сложным для меня, как новичка.

Вот мои базы данных структур:

test_related_orders структура: ORDER_NUMBER выглядит следующим образом: DE-1016-835 и user_id как обычный номер/идентификатор, как 1 в этом примере.

Структура базы данных wp_posts:

enter image description here

enter image description here

Последняя картина является примером запись из wp_posts. Проблема в том, что мне нужно взять номер заказа из post_title, и для этого мне нужно удалить первое слово «Lieferschein» из этого заголовка, чтобы получить номер заказа и нет дополнительного поля для номера ...

Спасибо для вашей помощи! Надеюсь, я объяснил это полностью.

ответ

1

Первой проблемой для решения является получение номера заказа из поля post_title, чтобы вы могли сравнивать значения в своем внутреннем соединении. Примитивный способ сделать это, предполагая, что номер заказа всегда в форме AA-DDDD-DDD будет

SELECT right(post_title, 11) as posts_order_number 

Как вы уже обнаружили, внутреннее соединение, что вам нужно, так как это будет только возврат результаты, в которых совпадают таблицы. Обратите внимание, что вы обычно присоединяетесь к таблицам на основе своих столбцов, а не напрямую сравниваете с вашей строкой '$ user_id' (и вы уже отфильтровывали это в своем предложении where).

Вы можете присоединиться к нескольким полям за раз, чтобы соответствовать по номеру заказа, а также user_id.

Ваш запрос теперь становится:

SELECT * 
    FROM test_related_orders tro 
    INNER JOIN wp_posts p 
    ON tro.user_id = p.post_author 
    AND tro.order_number = right(p.post_title, 11) 
    WHERE tro.user_id = '$user_id' AND order_unlock_time <= '$timestamp' 
+0

Что вы имеете в виду с тро? – Johnny97

+0

Думаю, я знаю, что это означает, что это псевдоним? – Johnny97

+0

yup, точно, вы можете набрать что-нибудь вместо 'tro', и это не имеет значения. Вы не можете быть настолько новичком, если знаете о псевдонимах;) –

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