基本的に、フラグを含むテーブルと顧客/ユーザーを含むテーブルが必要です。これらのテーブルは次のようになります。
フラグ テーブル:
- フラグの一意の ID (最も簡単な方法は、「ID」フィールドを に設定すること
AUTO_INCREMENT
です)。
- フラグ名
- フラグの説明
- もっと欲しいもの
ユーザー テーブル:
- フラグを格納するフィールド (シリアル化されたフラグの配列を格納することをお勧めします)
- 他の目的のために必要なその他のデータ
シリアル化された配列を格納する以外に、ユーザーの一意の ID とフラグ ID を格納する別のテーブルを作成できます。フラグごとに 1 行。ただし、最初の方法の方が効率的で優れていると思います。
フラグの選択と表示:
- シリアル化されたフラグの配列を含むフィールドを選択します
- 配列のシリアル化を解除し、
JOIN
フラグの名前と説明を選択するために使用します。
例
ユーザーのプロファイルにフラグを保存する:
ID 1、3、5、および 7 のフラグを保存するとします。
$flags = serialize(array(1, 3, 5, 7));
mysql_query("UPDATE `users` SET `flags` = '$flags'") or die(mysql_error());
フラグを編集する場合は、フィールドを選択し、配列のシリアル化を解除して、配列関数を使用して編集します。
選択と表示:
1、3、5、および 7 の値を持つ配列があります。クエリ
を作成する例を次に示します。SELECT
$flags = array(1, 3, 5, 7); // selected from 'users' table and unserialized
$query = "SELECT u.name, f.name, f.description FROM users u INNER JOIN flags f ON ";
$conditions = null;
for($i = 0; $i < count($flags); $i++)
{
$conditions .= "f.id = $flags[$i] OR ";
}
$conditions = substr($conditions , 0, -4); // removing the last " OR "
$query = $query . $conditions . " WHERE u.name = 'Nikola'";
これは、コードから取得したクエリです。
SELECT u.name, f.name, f.description
FROM users u
INNER JOIN flags f
ON f.id = 1 OR f.id = 3 OR f.id = 5 OR f.id = 7
WHERE u.name = 'Nikola'
名前、説明、ユーザー名とともにすべてのフラグを返します。
あとは、結果を表示するだけです。
編集 1 :ユーザー インターフェース
あなたが何を望んでいるのか正確に理解できたかどうかはわかりませんが、ユーザーごとに複数のフラグを許可する場合は、すべてのフラグにチェックボックスを作成するか、ドロップではなく複数の選択肢がある選択メニューを作成することをお勧めします。下。項目を 1 つしか選択できないので、ドロップダウンはお勧めできません。
EDIT 2 : jQuery Autocomplete
を
使用できます。これは Stack Overflow のタグ付けと非常によく似ており、おそらく最良の選択です。もう 1 つのアイデアは、ドロップダウン メニュー
を実際に使用して、複数のフラグを許可することです。ユーザーがドロップダウンからフラグを選択すると、AJAX を介して PHP 配列にフラグが格納され、その配列が に格納されます。例: AJAX 経由で PHP ファイルにリクエストを送信します。PHP ファイルで、フラグを格納する変数を読み取ります。空の場合 (フラグはまだありません) - 1 つのキーの配列を追加します。空でない場合は、その値 (配列全体) を読み取り、配列に新しいフラグを追加して、それをセッション変数に返します。
$_SESSION
$_SESSION
session_start();
if(isset($_POST['id'])) $flagid = $_POST['id']; // previously sent request via AJAX that contains this ID.
if(empty($_SESSION['flags'])) $_SESSION['flags'] = array($flagid); // this is the first selected flag
else
{
// other tags was selected earlier
$flags = $_SESSION['flags'];
$flags[] = $flagid;
$_SESSION['flags'] = $flags;
}
die("ok");
ここで、JS ファイルに戻り、返された結果を確認します。「OK」の場合は次に進み、「OK」以外の場合はエラーを表示します。
同じタグを複数回選択しないようにするには、ユーザーが選択したときに jQuery (この質問を参照) を使用してドロップダウンから削除できます。ページの別の場所に、選択したフラグを表示できます。
編集 3: 「複数」属性を
使用することもできます。<select>