2016-09-25 2 views
0

Прежде всего, мои извинения за грубую терминологию в названии.mysql, 1 таблица с условием, связанным с другой таблицей с другим условием

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

У меня есть две таблицы:

один "Рейтинги" (строки: продукт, пользователь, рейтинг, добавляемые) где user = $thisuser[id],

и один "продукты" (идентификатор, имя) WHERE product.id = rating.product.

Ive подробно читает о соединении (внутреннем, внешнем, левом, правом ...), и я застрял, как патрон на этом.

Мне нужна вся информация 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 различные способы не помогло. Любая помощь будет принята с благодарностью! Полегче со мной. * winces

+0

Можете ли вы представить структуру таблицы наряду с отношениями между таблицами. – Naruto

+0

Попробуйте сделать «LEFT JOIN». Вы видите все значения «NULL», если вы выбираете столбцы из таблицы 'products'? –

+0

@ Наруто: я извиняюсь. это мой первый пост здесь. Я не уверен, как обеспечить структуру. единственное отношение - products.id и ratings.product @ Tim Biegeleisen: Я делаю. где он печатает, у меня есть вся информация, кроме информации о продуктах. просто пустое место с 2 запятыми – user3502802

ответ

0

Убедитесь, что имя базы данных, которые вы предоставили в запросе являются правильными, поскольку ваше описание содержит имена таблиц, как отличные от кода что вы сделали.

Примечание: Вы выбрали только таблицу оценок и не выбрали из таблицы продуктов, и в моем коде я выбрал название продукта из таблицы продуктов.

Вы должны использовать ON условие наряду с WHERE так, что это будет идеальным вариантом, если вы используете JOIN query. Поскольку синтаксис запроса QUERY является результатом как таковой.

Вы можете предоставить сравнительное значение в поле ON и проверочном значении в ГДЕ, чтобы ваши данные выглядели обжаренными до ожидаемого.

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] содержит допустимое значение.

пытаются присвоить УАК этот путь

$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

Смежные вопросы