我需要SQL查询的帮助。 我想显示test_related_orders表中的行,其中当前用户id等于test_related_orders表中的user_id,其中order_unlock_time(来自我的表)是< = acutal timestamp。直到这里一切正常。但现在变得复杂了。 我还需要在我的wp_posts表中检查/限制是否有一个post_author等于我的test_related_orders user_id,它的order_number与我的test_related_orders order_number相同。
如果此语句为true,则将显示test_related_orders中的关联行。如果此语句为false,则不应存在关联的行。
(因此,当我删除woocommerce前端的订单时,该语句应该为此条目返回一个字符串。)
这是我现有的代码:
$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'";
&#13;
我想我可以使用INNER JOIN,我已经在这里试过了:
INNER JOIN wp_posts ON '$user_id' = post_author WHERE....
&#13;
但作为初学者,这对我来说很复杂。
以下是我的数据库结构:
test_related_orders结构: order_number看起来像:DE-1016-835,user_id为普通数字/ id,在本例中为1。
wp_posts数据库结构:
最后一张图是来自wp_posts的示例条目。问题是我必须从post_title获取订单号,为此我必须删除第一个单词&#34; Lieferschein&#34;从这个标题获得order_number,并且没有额外字段的数字...
感谢您的帮助!我希望我完全解释它。
答案 0 :(得分:1)
要解决的第一个问题是从post_title获取订单号,以便您可以比较内部联接中的值。假设订单号始终采用AA-DDDD-DDD格式的原始方法是
SELECT right(post_title, 11) as posts_order_number
正如您已经发现的那样,内部联接是您所需要的,因为它只返回表匹配的结果。请注意,您通常会根据列来加入表格,而不是直接与您的&#39; $ user_id&#39;字符串(并且您已在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'