需要帮助为select语句编写SQL查询

时间:2016-10-09 13:47:09

标签: php mysql sql-server wordpress woocommerce

我需要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;
&#13;
&#13;

我想我可以使用INNER JOIN,我已经在这里试过了:

&#13;
&#13;
INNER JOIN wp_posts ON '$user_id' = post_author WHERE....
&#13;
&#13;
&#13;

但作为初学者,这对我来说很复杂。

以下是我的数据库结构:

test_related_orders结构: order_number看起来像:DE-1016-835,user_id为普通数字/ id,在本例中为1。

wp_posts数据库结构:

enter image description here

enter image description here

最后一张图是来自wp_posts的示例条目。问题是我必须从post_title获取订单号,为此我必须删除第一个单词&#34; Lieferschein&#34;从这个标题获得order_number,并且没有额外字段的数字...

感谢您的帮助!我希望我完全解释它。

1 个答案:

答案 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'