1

この構造のテーブルがあります。

テーブル #1: ユーザー (ID、user_name)

1, 'john777'
2, 'andy'
3, 'tom'

テーブル #2: user_meta (meta_ID、user_ID、「meta_name」、「meta_value」)

1, 1, 'first_name', 'John'
2, 1, 'last_name', 'Smith'
3, 2, 'first_name', 'Andy'
4, 2, 'last_name', 'Pete'
5, 3, 'first_name', 'Thomas'
6, 3, 'last_name', 'Tan'
7, 3, 'other_random_meta', 'abcxyz'

WordPress に詳しい方のために説明すると、これはそのデータベース構造です。私がやりたいことは、first_name と last_name で構成される user_name と full name に基づいて、検索用語に一致するユーザーのユーザー ID を取得することです。

つまり、次の検索語に対して 1 を返すように検索したい: 「joh」、「john7」、「smith」、「john smi」、「smith jo」

4

2 に答える 2

1
于 2012-11-02T19:06:29.273 に答える
1
SELECT DISTINCT ID FROM 
(SELECT ID AS ID FROM users WHERE user_name LIKE 'YOURSEARCH%' 
UNION 
SELECT t1.user_id FROM 
  (SELECT user_id, meta_value AS firstName FROM user_meta WHERE meta_name ='first_name') AS t1 
INNER JOIN 
  (SELECT user_id, meta_value AS lastName FROM user_meta WHERE meta_name ='last_name') AS t2 ON t1.user_id=t2.userID 
WHERE concat_ws(' ',lastName,firstName) LIKE'YOURSEARCH%')

これにより、検索条件に一致する一意のユーザー ID が取得されます。

于 2012-11-02T19:44:42.277 に答える