2014-09-03 93 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喬杜裏:我沒有嘗試你的解決方案,但它可能工作