ここに合計n00b、最初の投稿なので、建設的にしてください!私は自分自身にPHP/MySQLを教えるために本を購入しましたが、残念ながら普遍的に賞賛されている本ではないので、私の進歩は少し不安定です。
リンクしたいテーブルが2つあります。表1(レコードと呼びましょう)に保持されているすべての情報を表示したいのですが、一度だけ表示します。次に、Recordsの各アイテムがテーブル2(UserTable)の特定のフィールドと一致するかどうかを確認し、一致する場合はチェックボックスをオンにし、一致しない場合は空のチェックボックスを表示します。
私がこれまでに抱えていた問題は、一致するレコードのアイテムのみを表示するか、複数の一致があるレコードの各アイテムの複数のインスタンスを表示することです。私は以下のコードでこれらを解決しました-しかし、おそらく単一のリンクを使用して、これを行うためのより良い方法があるはずだと私は考え続けていますか?
とにかく、ここにコードからのいくつかの抜粋があります:
$sql = "SELECT * FROM Records";
$res = mysqli_query($mysqli,$sql);
while ($iteminfo = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
$recordid2 = $iteminfo['record_id'];
レコードから関連データを引き出してテーブルの作成を開始するセクションを省略しました。次に、次のようにします。
$sql2 = "SELECT COUNT(*) AS matches FROM UserTable
where usertable.item = '$recordid2' and User_ID = '$current_user_id'";
$res2 = mysqli_query($mysqli, $sql2);
$matches = mysqli_fetch_array($res2, MYSQLI_ASSOC);
$matches2 = $matches['matches'];
if ($matches2) {
$output = "<input type='checkbox' name='test' checked>"; } else {
$output = "<input type='checkbox' name='test'>";
私が言っているように、これは機能しますが、少し不器用に感じます-レコード内のすべてのアイテムに対して個別のネストされたクエリを実行しているため、時間の経過とともに非常に遅くなる可能性があります。UserTableに一致するものがあるかどうかに応じて、すべての行情報(1回)と0または1を取得する、全体に対して単一のクエリを実行する方法はありますか?DISTINCTを使用してみましたが、機能しませんでした。