2014-09-03 31 views
0

我愿做一个SQL请求是这样的:SQL CONCAT命名

SELECT p.ID, p.post_title 
FROM ".$wpdb->prefix."posts AS p 
INNER JOIN ".$wpdb->prefix."postmeta pm 
ON pm.post_id=p.ID AND pm.meta_key='shops_list' 
INNER JOIN ".$wpdb->prefix."follow AS f 
ON pm.meta_value LIKE CONCAT('%',f.shop_followed_id,'%') 

shop_followed_id是列名这是行不通的,但是当我CONCAT('%',163,'%')测试,它的工作。

你知道语法错误在哪里吗?

meta_value的例子:a:3:{i:0; s:3:“168”; i:1; s:2:“22”; i:2; s:2:“43”;} shop_followed_id的例子:168

+4

*它不起作用*你可以用你的文章中的原始错误消息替换这个 – 2014-09-03 14:00:31

回答

0

在我看来,你有类似的倒退。请尝试:

INNER JOIN ".$wpdb->prefix."follow AS f 
ON f.shop_followed_id LIKE CONCAT('%',pm.meta_value,'%') 
+0

谢谢,但它确实pm.meta_value LIKE CONCAT('%',f .shop_followed_id,'%'),我正在搜索。 meta_value的例子:a:3:{i:0; s:3:“168”; i:1; s:2:“22”; i:2; s:2:“43”;} shop_followed_id:168 – 2014-09-03 14:19:27

+0

问题是条件。你是否尝试过这样的方式: 内部连接表作为f on Locate(f.shop_followed_id,pm.meta_value)> 0 ? – 2014-09-03 14:30:06

0

使用Cast for the f.shop_followed_id。

CONCAT( '%',CAST(f.shop_followed_id为varchar), '%')

可能是这项工作

0
SELECT p.ID, p.post_title AS title, p.post_type AS post_type, p.post_date AS post_date, f.id_shop_followed, pm.meta_value 
      FROM ".$wpdb->prefix."posts AS p 
      INNER JOIN ".$wpdb->prefix."postmeta pm 
      ON pm.post_id=p.ID AND pm.meta_key='shops_list' 
      INNER JOIN ".$wpdb->prefix."follow AS f 
      ON f.id_user_following = $id_user AND LOCATE(f.id_shop_followed, pm.meta_value)>0 AND f.id_shop_followed > 0 
      WHERE (p.post_type='news' OR p.post_type='promotions' OR p.post_type='product') 
       AND p.post_status='publish' AND f.id_user_following = $id_user 
      GROUP BY p.ID 

非常感谢您恰伊Göncüoğlu @Brahmanand乔杜里:我没有尝试你的解决方案,但它可能工作