0

私は 2 つのテーブルを持っています。1 つ目はユーザーの詳細を含むユーザー テーブルで、2 つ目はサービス ID が格納されたサービス テーブルです。

テーブル ユーザー:

 id    Name   mail             gender
-----------------------------------------
  1    John   john@gmail.com   Male 
  2    Mike   mike@gmail.com   Male
  3    Duke   duke@gmail.com   Male  
  4    Queen  queen@gmail.com  Female

テーブル サービス:

 id   profile_email   service
 ----------------------------
 1    john@gmail.com    3   
 2    john@gmail.com    4    
 3    mike@gmail.com    3
 4    mike@gmail.com    5   
 5    queen@gmail.com   3
 6    queen@gmail.com   4

フォームのチェックボックス:

<input type="checkbox" value="1" name="services[]" id="services1"  /> Service 1
<input type="checkbox" value="2" name="services[]" id="services2"  /> Service 2
<input type="checkbox" value="3" name="services[]" id="services3"  /> Service 3
<input type="checkbox" value="4" name="services[]" id="services4"  /> Service 4
<input type="checkbox" value="5" name="services[]" id="services5"  /> Service 5

ここで私の質問は、これら 2 つのテーブルを結合して、チェックされたサービスに基づいてフィルター処理されたレコードを表示するにはどうすればよいかということです。

以下のクエリを試していますが、問題は重複した行を示しています。私を助けてください。よろしくお願いします.m

$select  =  "SELECT a.*,  b.services FROM users a LEFT JOIN services AS b ON b.profile_email = a.mail ";

if(isset($_REQUEST['services']))
{
$services_search = mysql_real_escape_string(implode(', ', $_REQUEST['services']));
$select .= " AND b.services IN ($services_search)";
}
4

2 に答える 2

1

これらのテーブルで何をしようとしているのか完全にはわかりませんが、同じアドレスを 2 回保存するべきではありません。新しいテーブルを作成し、そこに電子メール アドレスだけを保存してから、外部キーを使用してテーブルでそれらを参照します。

人物表

id    name   mail_id   gender
-----------------------------------------
 1    John   1         Male 
 2    Mike   2         Male
 3    Duke   3         Male  
 4    Queen  4         Female

これが何のテーブルなのかわからない

id   mail_id         service
----------------------------
1    1               3   
2    1               4    
3    2               3
4    2               5   
5    4               3
6    4               4 

アドレステーブル

id    adress
----------------------
1     john@gmail.com
2     mike@gmail.com
3     duke@gmail.com
4     queen@gmail.com

いいえ、IDの外部キーを使用する場所ならどこでもアドレスに参加できます。このようなもの:

SELECT a.name, a.gender, b.adress
FROM persons as a
INNER JOIN adress as b on a.mail_id = b.id;

http://dev.mysql.com/doc/refman/5.7/en/example-foreign-keys.html

于 2013-09-09T21:11:17.667 に答える