2016-09-25 144 views
0

首先,我对标题中的粗俗术语表示歉意。mysql,1个表的where条件加上另一个表的不同where条件

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

我有两个表:

一个 “评级”(行:产品,用户评价,补充),其中user = $thisuser[id]

和一个 “产品”(ID,名称)在哪里product.id = rating.product

我已经广泛阅读了关于连接(内部,外部,左边,右边...)的内容,并且我被卡住了。

我需要所有信息在哪里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不同的方式不无济于事。任何帮助将不胜感激!在我身上轻松一下。 * winces

+0

你能与表之间的关系一起提供你的表结构。 – Naruto

+0

尝试做一个'LEFT JOIN'。如果您从“产品”表中选择列,您是否看到所有“NULL”值? –

+0

@火影忍者:我道歉。这是我在此的头一篇博文。我不知道如何提供结构。唯一的关系是products.id和ratings.product @ Tim Biegeleisen:我知道。它打印的地方,我有所有的信息,但产品信息。只有2个逗号为空的空间 – user3502802

回答

0

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

注意:您仅选择了评估表,并且没有选择产品表和我的代码,我从产品表中选择了产品名称。

你必须使用ON条件与WHERE一起,这样当你使用JOIN query这将是完美的。由于加入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']."'"; 
+0

这也没有工作。只有这个用户被打印 – user3502802

+0

我得到了这个工作!但在应该有多个时,它仍然只显示一个结果。有什么我忘记了吗? – user3502802

+0

为了显示循环外的所有值,需要将该值存储为数组,然后可以在循环外部打印该变量,以便显示所需的所有值。否则,你可以在循环内部回显语句,以便它显示所有值,如果它也有多个值的话。 –

0
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。

+0

这只打印$ thisuser [id],其他都是空的 – user3502802

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"); } 
0

确保$ 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) " 

,您可以用在子句中使用的,并最终把里面的()

+0

这只给我$ acc_user id#而没有别的 – user3502802