1

私は主に学習を統合するためのシステムを構築していますが、実際に使用されます。

私が焦点を当てているER図の部分を口頭で説明しようと思います。

各士官候補生は多くのユニフォームIDを持つことができます

各ユニフォームIDはテーブルユニフォームの新しいエントリであるため、cadets(テーブル)は次のようになります。

id | name    | ... | uniformID

1  | Example | ... | 1,2,3

uniformテーブル:

id | notes             | cadet

1  | Need new blahh    | 1

2  | Some stuff needed | 1

3  | Whatever you like | 1

考え直してみると、データベースの3番目の列は必要ないようです。

私は、uniformID、コードの各IDを反復処理しようとしています。

<?php
$cadet = $_GET['id']; // set  from URL

$query = mysql_query("SELECT `uniformID` FROM `cadets` 
  WHERE id = '$cadet' LIMIT 1") 
  or die(mysql_error()); // get uniform needed as string

// store it
while ($row = mysql_fetch_array($query)) {
  $uniformArray = $row['uniformID']; 
}
echo $uniformArray . "  ";
$exploded = explode(",", $uniformArray); // convert into an array

// for each key in the array perform a new query
foreach ($exploded as $key => $value) {
  $query(count($exploded));
  $query[$key] = mysql_query("SELECT * FROM `uniform` WHERE `id` = '$value'");
}

?>

私が言うように、これは主に統合の目的ですが、私はエラーを思い付きました、sqlは言っています:

致命的なエラー:関数名は、82行目のC:\ wamp \ www \ intranet\uniform.phpの文字列である必要があります

82行目は次のとおりです。

$query[$key] = mysql_query("SELECT * FROM `uniform` WHERE `id` = '$value'");

それがうまくいくかどうかわからなかったので、私はそれを試しました、そして今私は立ち往生しています!

編集:

これに貢献してくれたすべての人に感謝します!これが機能するコードになりました。

foreach ($exploded as $key => $value) {
              //$query(count($exploded));
              $query = mysql_query("SELECT * FROM `uniform` WHERE `id` = '$value'");
              while ($row = mysql_fetch_array($query)) {
                echo "<tr>
                  <td>" . $row['id'] . "</td>
                  <td>" . $row['note'] . "</td>
                </tr>";
              }
            }

whileを追加し、foreachにネストして反復を実行しました

4

1 に答える 1

1

あなたのテーブルに加えて

cadets(id, ...)
uniforms(id, ...)

cadetsのエンティティとエンティティの関係を記述するクロス積テーブルを使用するuniforms

cadets_x_uniforms(cadet_id, uniform_id)

各関係 (この場合、士官候補生 x には均一な y があります) について、それぞれの ID を持つレコードをクロス積テーブルに入れます。

...うーん、この場合、実際の例の方がうまくいくと思います...

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

// fetch the uniforms of a specific cadet
$stmt = $pdo->prepare('
    SELECT
        c.name,u.id,u.labelid
    FROM
        so_cadets as c
    LEFT JOIN
        so_cadet_uniform as cxu
    ON
        c.id=cxu.cadet_id
    LEFT JOIN
        so_uniforms as u
    ON
        cxu.uniform_id=u.id
    WHERE
        c.name=?
');
$stmt->execute( array('cadetB') );
$stmt->setFetchMode(PDO::FETCH_ASSOC);
echo "uniforms of cadetB\n";
foreach( $stmt as $row ){
    echo join(', ', $row), "\n";
}

// fetch cadets without uniforms
$query = '
    SELECT
        c.name
    FROM
        so_cadets as c
    WHERE
        NOT EXISTS(SELECT uniform_id FROM so_cadet_uniform as cxu WHERE c.id=cxu.cadet_id)
';
echo "cadets without uniforms\n";
foreach( $pdo->query($query, PDO::FETCH_ASSOC) as $row ){
    echo join(', ', $row), "\n";
}   


function setup($pdo) {
    $pdo->exec('
        CREATE TEMPORARY TABLE so_cadets (
            id int auto_increment,
            name varchar(32),
            primary key(id)
        )
    ');

    $pdo->exec('
        CREATE TEMPORARY TABLE so_uniforms (
            id int auto_increment,
            labelid varchar(32),
            primary key(id),
            unique key(labelid)
        )
    ');

    $pdo->exec('
        CREATE TEMPORARY TABLE so_cadet_uniform (
            cadet_id int,
            uniform_id int,
            primary key(cadet_id,uniform_id)
        )
    ');


    $stmt = $pdo->prepare('INSERT INTO so_cadets (name) VALUES (?)');
    foreach( range('A','F') as $c ) {
        $stmt->execute( array('cadet'.$c));
    }

    $stmt = $pdo->prepare('INSERT INTO so_uniforms (labelid) VALUES (?)');
    foreach( range('K','Z') as $c ) {
        $stmt->execute( array('label'.$c));
    }

    $stmt = $pdo->prepare('INSERT INTO so_cadet_uniform (cadet_id,uniform_id) VALUES (?,?)');
    $cadetHasUniforms = array(
        1=>array(1,2,3), // <- cadetA
        2=>array(7,9), // <- cadetB
        3=>array(8,5,4), // <- cadetC
        // 4=>array() <- cadetD, no entry, no uniforms
        5=>array(10,13,15) // <- cadetE
        // <- cadetE, no entry, no uniforms
    );
    foreach( $cadetHasUniforms as $cadetId=>$uniformIds ) {
        foreach( $uniformIds as $uid ) {
            $stmt->execute(array($cadetId, $uid));
        }
    }

}

版画

uniforms of cadetB
cadetB, 7, labelQ
cadetB, 9, labelS
cadets without uniforms
cadetD
cadetF
于 2012-11-08T10:58:45.923 に答える