выбор данных из таблицы по данным зарегистрированным в другой таблице

levi-de

Новичок
выбор данных из таблицы по данным зарегистрированным в другой таблице

Добрый день, господа программисты!

У меня следующий вопрос:

Имеется две таблицы.
В таблице users находится список пользователей (логин уникальный).
В таблице objekte находятся объекты, предоставляемые на продажу вышеупомянутыми пользователями.

Каждый пользователь имеет право зарегистрировать до 30 объектов включительно.

Я решаю эту задачу таким образом:
Как я уже выше говорил, в таблице users логин пользователя уникален, а в таблице objekte все объекты идут вперемешку, но у каждого из них есть одно поле, в котором помещён логин владельца. Тое есть до 30 строк с одинаковым логином.





Задача:

При поиске объектов искать товары, принадлежащие только активным пользователям. Не буду вдаваться в подробности, что такое активные пользователи, а то ещё сильнее вас запутаю, при чём, до этого момента уже всё получилось.



$result = mysql_query("SELECT benutzername FROM users WHERE termin != ''");
Выбираю из users все логины, у которых поле termin не равно пустому

$num_rows = mysql_num_rows( $result );
while ( $a_row = mysql_fetch_row( $result ) )
{
foreach ( $a_row as $imena ) регистрирую массив значений под одну переменную
{
print (“$imena”); вывожу на экран логины всех активных пользователей
}
}


То есть до сюда пока всё работает.
Теперь, собственно говоря, мой вопрос.
Мне нужно из таблицы objekte вытащить все строки у которых логин равен вышеупомянутой переменной $imena. Другими совами все объекты принадлежащие пользователям у которых поле termin не равно пустому.

$sql="select * from objekte benutzername = '$imena'";

так не работает. Выбирает только первого пользователя и дальше не идёт. А если поставить этот запрос в цикл

$result = mysql_query("SELECT benutzername FROM users WHERE termin != ''");
$num_rows = mysql_num_rows( $result );
while ( $a_row = mysql_fetch_row( $result ) )
{
foreach ( $a_row as $imena )
{
$sql="select * from objekte benutzername = '$imena'";
}
}

то вообще fatal error пишет, запутывается короче.

Вот такая вот проблемка. Помогите пожалуйста решить.
 

Nirva

Dmitry Polyakov
так...
users - пользователи
objs - товары
users.termin - не пустое
users.name - имя пользователя (используется как идентификтор)
objs.id - идентификатор товара
objs.user - владелец товара
выбираем все товары пользователей, у которых термин не пустой.

Код:
$query = "select o.id as object_id,u.name as user_name, from objs o left join users u on o.user=u.name where u.termin!='' order by u.name asc";
$result = mysql_query($query);
while ($res = mysql_fetch_array()) {
echo $res['object_id'] ." user: " .$res['user_name'] .'<br />';
}
проверь
 

levi-de

Новичок
большое спасибо за внимание к моему вопросу.

Задачу Вы поняли прекрасно, только что то я разобраться ни как не могу в запросе.


<!--
Твой код

select o.id as object_id,u.name as user_name, from objs o left join users u on o.user=u.name where u.termin!='' order by u.name asc
---->

к сожалению, это всё что я сог разобрать, и как видите, по логике ничего полезного нижеприведённый код не принесёт

login у меня называется benutzername

select objekte.id as objekt_id, users.benutzername as user_name from objekte where users.termin != ' '


Это тут в коде по ходу дела сразу и комментарии написаны?

o left join users u on o.user=u.name where u.termin!='' order by u.name asc



Если не сложно объясни пожалуйста поподробнее.
 

tony2001

TeaM PHPClub
levi-de
>по логике
это значит "я не проверял, но скажу" ?
если ты проверял, то где результат?
 

Nirva

Dmitry Polyakov
2tony: прости, оффтоп. вместо [ code ] хайлайт как использовать, чтобы не растягивало строки?
2levi:
select
o.id as object_id #выбираем идентификтор товара
,u.name as user_name #и имя пользователя (кстати, отсюда убери запятую =) после юзер_нейм)
from
objs o #из таблицы objs которой присваиваем псевдоним "o", чтобы обращаться к ее столбцам покороче
left join #объединяя слева
users u #с таблицей юзерс с псевдонимом ю
on o.user=u.name #по условию ..
where u.termin!='' order by u.name asc #остальное понятно

это означает что исходный результат у тебя будет в виде таблицы в которой все данные objects.user заменены на user.name

представь, есть таблица товаров, имя - идентификатор и идентификтор стоимости в следующей таблице
forsale
name|price_id
lamp | 1
monitor | 2
mouse | 1

prices
id|price
1 | 20
2 | 200

после левого объединения forsale<-prices по forsale.id_price=prices.id и выберешь имя - цена
ты получишь резлуьтаты в виде таблицы
forsale.name | prices.price
lamp | 20
monitor | 200
mouse | 20

?
 

tony2001

TeaM PHPClub
Nirva
>вместо [ code ] хайлайт как использовать, чтобы не растягивало строки?
[ php ] [ /php ]
 

levi-de

Новичок
Что то ошибку выдаёт fetch_array, причём, я так глянул, не совсем подходит под мою задачу. Я ведь кусочек только написал, при чём переделал под простые параметры, для понимания принципа и для вашего удобства.

А вообще, я так подумал, у меня ведь всё практически правильно, только надо откорректировать немного. вернее, я не хочу, что бы мне кто то делал, а что бы просто показали, в чём я ошибаюсь.

вот такое решение идеально подходит для моей задачи

только видимо тут нужно не просто по $imena фильтровать, а, я так думаю, массив сделать, а вот то у меня ни как и не получается


$result = mysql_query("SELECT benutzername FROM users WHERE termin != ''");
$num_rows = mysql_num_rows( $result );
while ( $a_row = mysql_fetch_row( $result ) )
{
foreach ( $a_row as $imena )
{
$sql="select * from objekte benutzername = '$imena'";
}
}
 
Сверху