【问题标题】:mysql, 1 table with where condition joined with another table with different where conditionmysql, 1 个具有 where 条件的表与另一个具有不同 where 条件的表连接
【发布时间】:2016-09-25 06:20:50
【问题描述】:

首先,对于标题中粗俗的术语,我深表歉意。

<? if ($thisguy == "noob") { echo("bear with me"); } ?>

我有两张桌子:

一个“评分”(行:产品、用户、评分、添加)WHERE user = $thisuser[id]

和一个“产品”(ID、名称)WHERE product.id = rating.product

我已经广泛阅读了有关连接(内、外、左、右...)的内容,但我对此非常困惑。

我需要数组中的所有信息 WHERE Product.id = ratings.product and user = $thisuser[id]

我正在使用这个:

$result = mysql_query("SELECT ratings.product, ratings.user, ratings.rating, ratings.added FROM ratings INNER JOIN products ON products.id = ratings.product AND user = $THISUSER[id]");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $product = $row['product'];
    $user = $row['user'];
    $rating = $row['rating'];
    $added = $row['added'];
    $pid = $row['id'];
    $pname = $row['name'];
    }
print("$user, $rating, $added, $THISUSER[id], $pname, $pid"); }

这会在评级表中生成所有内容(但只有一个实例),而在产品表中没有任何内容...我已经尝试了 100 种不同的方法,但均无济于事。任何帮助将不胜感激!对我放轻松。 *威瑟斯

【问题讨论】:

  • 你能提供你的表结构以及表之间的关系吗?
  • 试试LEFT JOIN。如果您从products 表中选择列,您会看到所有NULL 值吗?
  • @火影忍者:我很抱歉。这是我在此的头一篇博文。我不确定如何提供结构。唯一的关系是products.id 和ratings.product //@Tim Biegeleisen:我愿意。它打印的地方,除了产品信息,我有所有信息。只是用 2 个逗号空格
  • @user3502802。我已经提供了解决方案,请尝试让我知道

标签: php mysql


【解决方案1】:

您没有从产品表中选择任何列,请更改您的选择

$result = mysql_query("SELECT ratings.product, ratings.user, ratings.rating, ratings.added, products.id, products.name FROM ratings INNER JOIN products ON products.id = ratings.product where ratings.user = $THISUSER[id]");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $product = $row['product'];
    $user = $row['user'];
    $rating = $row['rating'];
    $added = $row['added'];
    $pid = $row['id'];
    $pname = $row['name'];
    }
print("$user, $rating, $added, $THISUSER[id], $pname, $pid"); }

【讨论】:

    【解决方案2】:

    确保您在查询中提供的数据库名称是正确的,因为您的描述包含与您所做的代码不同的表名称。

    注意:您只选择了评级表,没有从产品表中选择,在我的代码中,我从产品表中选择了产品名称。

    您必须将ON 条件与WHERE 一起使用,以便在您使用JOIN query 时完美。由于 Join QUERY 的语法是这样产生的。

    您可以在 ON 中提供比较值,在 WHERE 中提供检查值,以便您的数据看起来符合您的预期。

    JOIN QUERY 在您的情况下将如下所示。

    $query = "SELECT rating.product,rating.user,rating.rating,product.name FROM rating INNER JOIN products ON products.id = rating.product WHERE rating.user ='".$thisuser['id']."'";
    

    【讨论】:

    • 我得到了这个工作!但是当应该有多个时,它仍然只显示一个结果。有什么我忘记了吗?
    • 为了显示循环外的所有值,您需要将值存储为数组,然后您可以在循环外打印变量,以便显示所有需要的值。否则,您可以在循环本身内回显该语句,以便在它也有多个值时显示所有值。
    【解决方案3】:
    SELECT ratings.product, ratings.user, ratings.rating, ratings.added FROM ratings INNER JOIN products ON products.id = ratings.product WHERE ratings.user = $THISUSER[id]
    

    试试这个,在最后一个子句中使用 WHERE 而不是 AND。

    【讨论】:

    • 这只会打印$thisuser[id],其他都是空白
    【解决方案4】:

    确保 $THISUSER[id] 包含有效值。

    尝试以这种方式分配 var

    $acc_user = $THISUSER[id];
    
    "SELECT ratings.product, ratings.user, ratings.rating, ratings.added 
    FROM ratings 
    INNER JOIN products ON (products.id = ratings.product 
                  AND ratings.user = $acc_user) "
    

    你可以使用 on 子句并最终放入 ()

    【讨论】:

    • 这只给了我 $acc_user id # 而没有别的
    猜你喜欢
    • 2012-05-12
    • 2017-10-15
    • 1970-01-01
    • 2023-03-16
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多