0

したがって、あるテーブルのIDが別のテーブルに一致する外部キーを持っているかどうかに基づいて、何らかのフォームを表示したいswitchステートメントがあります。

これまでのところ、私が試したのは、一方の while ステートメントを別のステートメントにネストすることであり、機能していません。

$subresult = mysqli_query($con,"SELECT * FROM tags GROUP BY tag");
$subresult2 = mysqli_query($con,"SELECT * FROM tag_subscribe WHERE uid = $uid");

while ($row = mysqli_fetch_array($subresult)) {
    $tid = $row['tid'];

    while ($row2 = mysqli_fetch_array($subresult2)) {
        $tid2 = $row2['tid'];
    }
    if ($tid2 == $tid) {
        $subbedup = 'yes';
    } else {
        $subbedup = 'no';
    }

    switch ($subbedup) {
    case ('yes'):
        echo "alternate html form goes here because $tid2 == $tid";
        break;
    case ('no'):
        echo "html form goes here";
        break;
    }
}

したがって、このコードを実行すると、外部キーを含む 2 番目のテーブルの最後のレコードである 1 つのスイッチ「yes」を除いて、スイッチ「no」のみが返されます。考えてみると、テーブル内のレコードがなくなるまでこのループを実行し続けるので、それは理にかなっています。したがって、この時点までに約 6 分を費やし、最後の 6 時間は正しく動作させるために費やしましたが、運がありませんでした。

だからもう一度、SOの素晴らしい人たち、私を救ってください!よろしくお願いします:)

だから私の質問は次のとおりです:これはどのように正しく行われますか?

4

3 に答える 3

4

データベースの構造がよくわからないので、即興で説明します。

これらのサンプル テーブルと列を考えると、次のようになります。

tags
id name

tag_subscriptions
user_id tag_id

以下のクエリは、すべてのタグをループします。各タグにはsubscribed、現在のユーザーがその特定のタグを購読しているかどうかに応じて、「はい」または「いいえ」に設定された列が含まれています。

$sql="SELECT t.`id`, t.`name`, IF (ISNULL(ts.`tag_id`),'no','yes') AS `subscribed`
  FROM `tags` t
  LEFT JOIN `tag_subscriptions` ts ON (ts.`user_id`=$uid AND ts.`tag_id`=t.`id`)
  WHERE 1;"

次に、すべてのタグをループします。

$q=mysql_query($sql) or die(mysql_error());

while ($row=mysql_fetch_assoc($q)) {
    switch ($row['subscribed']) {
      case 'yes'
        // user is subscribed to this tag
        break;
      default:
        // user is not subscribed to this tag
    }
}

私は(願って)これがあなたが探しているものに近いと思います.

http://sqlfiddle.com/#!2/58684/1/0

于 2013-04-19T00:16:38.003 に答える