2012-04-08 17 views
1

php post formを使用して、私のチェックボックスからMySQLデータベースに複数のIDを挿入します。例では、id(チェックボックス値テーブルtest)をmysqlに挿入します。PHPはmysqlから複数のデータを取得します

id | name 
----+------- 
    1 | test1 
    2 | test2 
    3 | test3 
    4 | test4 
    5 | test5 
    6 | test6 
    7 | test7 
    9 | test9 
:今私は(テーブル名が testです)

私のチェックボックスの値(データ=ユーザーIDテーブルtestの水平リストの名前を印刷)のMySQLからデータを取得し、私の例の出力で私のページに印刷する機能を必要とします

MySQLデータ挿入(表usertestの名前):

id | data | userid 
----+---------+-------- 
    1 | 1:4:6:9 | 2 
    2 | 1:2:3:4 | 5 
    3 | 1:2  | 7 

例outout :(プリントテーブル試験の水平リスト名データ=ユーザーID)

あなたのusertestテーブルを想定し
user id 2 choise : test1 - test4 - test6 - test9 

おかげ

+3

あなたはデータベースデザインを正規化する必要があります。 1つのフィールドに複数の値を格納するのは、BADデザインの99.999%です。そしてこれは0.001%の1つではありません。 –

+0

私は選択がありませんでした! – Gcoder

+1

なぜあなたは選択肢がありませんでしたか? ** [この最初の通常のフォームの記事](** http://ja.wikipedia.org/wiki/First_normal_form)** – nnichols

答えて

2

はあなたの例に記載されている唯一の3つの列を持っているあなたは、次でそれを置き換える必要があります -

+------+--------+ 
| data | userid | 
+------+--------+ 
| 1 | 2 | 
| 4 | 2 | 
| 6 | 2 | 
| 9 | 2 | 
| 1 | 5 | 
| 2 | 5 | 
| 3 | 5 | 
| 4 | 5 | 
| 1 | 7 | 
| 2 | 7 | 
+------+--------+ 
-

CREATE TABLE usertest (
    data INTEGER NOT NULL, 
    userid INTEGER NOT NULL, 
    PRIMARY KEY (data, userid) 
); 

を次に、あなたのデータは次のようになります

このデータを照会すると、簡単になります -

SELECT usertest.userid, GROUP_CONCAT(test.name SEPARATOR ' - ') 
FROM usertest 
INNER JOIN test 
    ON usertest.data = test.id 
GROUP BY usertest.userid 

あなたはあなたがPHPソリューションを使用し、そのIDをインデックスとする配列で可能なチェックボックスの値を格納することができGROUP_CONCAT here

についての詳細を読むことができます。何かが好き -

<?php 

$db = new PDO('mysql:dbname=test;host=127.0.0.1', 'user', 'pass'); 
$sql = 'SELECT id, name FROM test'; 

$stmt = $db->prepare($sql); 
$stmt->execute(); 

$array = array(); 

while ($row = $stmt->fetchObject()) { 
    $array[$row->id] = $row->name; 
} 

$sql = 'SELECT userid, data FROM usertest'; 

$stmt = $db->prepare($sql); 
$stmt->execute(); 

while ($row = $stmt->fetchObject()) { 
    $data = explode(':', $row->data); 
    foreach($data as $key => $val) { 
     $data[$key] = $array[$val]; 
    } 
    print "user id {$row->userid} choise : " . implode(' - ', $data) . "<br/>\n"; 
} 
+0

私は完全に合意する、ジャンクションテーブルは完璧です。しかし私は古いスクリプトを編集しているので、変更する機会はありません。私は同じ方法で作業しなければなりません。手伝って頂けますか ?! – Gcoder

+0

複数値フィールドAFAIKの個々の値に結合する方法はありません。ストアドプロシージャを使用してmvフィールドの値をループすることができます。あなたはPHPでそれを行うだけでなく、データ構造を正規化するための正当化の一部として低性能を使用するかもしれません。 – nnichols

関連する問題