ungureanunicolae
@ungureanunicolae
Начинающий вебмастер

Как сделать запрос SQl внутри WHILE другого запроса?

Всем привет, есть отрывок кода
<?php
$res = mysql_query($query = "SELECT * FROM `mails` WHERE u_id='1'") or die(mysql_error());
while ($row = mysql_fetch_object($res)) {
	
	$res1 = mysql_query("SELECT * FROM `user` WHERE id='$row->o_id'") or die(mysql_error());
	$data1 = mysql_fetch_row($res1); 
	$row->names = $row->$data1['name'];
	$data_log[] = $row;
};
?>

и выводит он примерно такое содержимое:
<?php foreach ($data_log as $key=>$item) {?>
<tr>
	<td><a href="?mail=<?php  echo $item->id; ?>"><?php  echo $item->tema; ?></a></td>
	<td><?php  echo $item->names; ?></td>
	<td></td>
</tr>
<?php $key+1;}; ?>

Проблема в том что первый запрос все выводит нормально, а второй ничего не выводит, тыкните носом пожалуйста!!
  • Вопрос задан
  • 621 просмотр
Решения вопроса 1
talgatbaltasov
@talgatbaltasov
Freelancer
вот так попробуйте $row->names = $data1['name'];
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
А почему бы не сделать JOIN вместо того, чтобы делать циклические запросы, которые всё сильно замедлят?
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Что мешает сделать один запрос?
Ответ написан
@murrometz
Ошибка в этой строчке
$row->names = $row->$data1['name'];

P.S. В качестве дополнения, не пойму, зачем вы в цикле получаете user'a, если достаточно получить один раз ..
Насколько я понял по коду
Ответ написан
@chezzy
$row->$data1['name'];
Ответ написан
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
а можно по-подробнее про цель действа? Может проще сделать правльный SQL запрос (что-то мне подсказывает, что тут попахивает JOINом)?

И завязывайте с mysql_query. оно скоро умрет.

PS выполнят второй запрос в консоли mysql пробовали? может у вас нет ни одной записи в user с id = 1
Ответ написан
ungureanunicolae
@ungureanunicolae Автор вопроса
Начинающий вебмастер
Сделал как написал Талгат Балтасов
<?php
$res = mysql_query(SELECT * FROM mails as m JOIN user as u on u.id = m.o_id WHERE m.u_id='1');
while ($row = mysql_fetch_object($res)) {
	$data_log[] = $row;
};
?>
<table id="mails">
<tr>
	<th>Тема</th>
	<th>Отправитель</th>
	<th>Действие</th>
</tr>
		<?php foreach ($data_log as $key=>$item) {?>
		<tr>
			<td><a href="?mail=<?php  echo $item->id; ?>"><?php  echo $item->tema; ?></a></td>
			<td><?php  echo $item->name; ?></td>
			<td></td>
		</tr>
		<?php $key+1;}; ?>
</table>

но юзера не выводит(
выводит только из первой таблицы сообщения
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы