因此,我有一个switch语句,我想根据一个表中的ID在另一个表中是否具有匹配的外键来显示一种形式或另一种形式。

到目前为止,我尝试过的是将一个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;
    }
}


因此,运行此代码时,它仅返回开关“ no”,除了将返回一个开关“ yes”(恰好是第二个包含外键的表的最后一条记录)。当我考虑它时,这是有道理的,因为它将一直循环运行直到它用完表中的记录为止。因此,我花了大约六分钟的时间到了这一点,并且我花了最后6个小时来尝试使其正常工作而没有任何运气。

所以再一次,SO的好人,救救我!谢谢,麻烦您了 :)

所以我的问题是:如何正确地做到这一点?

最佳答案

我不确定您的数据库结构,所以我会即兴发挥。

给定这些示例表和列:

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

关于php - 根据两个表中的变量是否匹配来切换语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16094939/

10-16 21:25