D_Master Опубликовано 8 июня, 2009 Жалоба Поделиться Опубликовано 8 июня, 2009 Дано:1. Таблица account (таблица с игровыми аккаунтами).2. Таблица account_banned (таблица с забаненными аккаунтами).Имеется:$db = @mysql_connect('localhost', 'root', '') or die('Ошибка MySQL: '.mysql_error().'');$db_s = @mysql_select_db('realmd') or die('Ошибка MySQL: '.mysql_error().'');echo' Бан-лист'; echo 'АккаунтКем забаненПричинаДата банаДата окончания бана';$result=mysql_query("SELECT * FROM account_banned where active=1");while ($row = mysql_fetch_array($result)){$cp_ip = $row['id'];$cp_bannedby = $row['bannedby'];$cp_banreason = $row['banreason'];$cp_bandate = $row['bandate'];$times_start = getdate($cp_bandate);$day_start = $times_start['mday'];$month_start = $times_start['month'];$year_start = $times_start['year'];$cp_unbandate = $row['unbandate'];$permament = 0;if($row['bandate']==$row['unbandate']) { $permament=1; }$times_end = getdate($cp_unbandate);$day_end = $times_end['mday'];$month_end = $times_end['month'];$year_end = $times_end['year'];$month_array = array('January' => 'января','February' => 'февраля','March' => 'марта','April' => 'апреля','May' => 'мая','June' => 'июня','July' => 'июля','August' => 'августа','September' => 'сентября','October' => 'октября','November' => 'ноября','December' => 'декабря',);echo ''.$cp_ip.''.$cp_bannedby.''.$cp_banreason.'';if($permament==1) { echo 'Пермамент'; }else { echo ''.$day_start.' '.$month_array[$month_start].' '.$year_start.' г.'; }if($permament==1) { echo 'Пермамент'; }else { echo ''.$day_end.' '.$month_array[$month_end].' '.$year_end.' г.'; }}echo '';mysql_close($db);?>В итоге, в поле "Аккаунт" отображается ID забаненного аккаунта, а хотелось бы, чтобы брался `username` из `account`, вместо `id` из `account_banned`.Есть запрос на получение имен:SELECT `username` FROM `account` WHERE `id` IN (SELECT `id` FROM `account_banned` WHERE `active` = 1)но вот как его затащить в цикл, ума не приложу - при$names = mysql_query("SELECT `username` FROM `account` WHERE `id` IN (SELECT `id` FROM `account_banned` WHERE `active` = 1)");$names = mysql_fetch_array($names);echo $names['username'];// ....// ....во всех строчках отображается только первый полученный ник.Буду благодарен, если кто-нибудь поможет вместо айдишек отобразить имена пользователей.<?php Ссылка на комментарий
NAT Опубликовано 8 июня, 2009 Жалоба Поделиться Опубликовано 8 июня, 2009 вроде типа такого:while($names = mysql_fetch_array($names)){ echo $names['username'];} Ссылка на комментарий
D_Master Опубликовано 9 июня, 2009 Автор Жалоба Поделиться Опубликовано 9 июня, 2009 NATу меня уже один подобный цикл есть, в этом вся и проблема Ссылка на комментарий
NAT Опубликовано 9 июня, 2009 Жалоба Поделиться Опубликовано 9 июня, 2009 попробуй это не в цикле, а перед циклом$names = mysql_query("SELECT `username` FROM `account` WHERE `id` IN (SELECT `id` FROM `account_banned` WHERE `active` = 1)");или переделай под твой запрос$result=mysql_query("SELECT * FROM account_banned where active=1");while ($row = mysql_fetch_array($result)){ Ссылка на комментарий
D_Master Опубликовано 9 июня, 2009 Автор Жалоба Поделиться Опубликовано 9 июня, 2009 попробуй это не в цикле, а перед цикломТогда везде пишется только первое полученное имя, массив не переключается на следующее значение. Ссылка на комментарий
X-tender Опубликовано 9 июня, 2009 Жалоба Поделиться Опубликовано 9 июня, 2009 SELECT(select ac.`username` FROM `account` ac WHERE ac.`id`=ab.id) as username,a.*FROM `account_banned` ab WHERE `active` = 1 Ссылка на комментарий
D_Master Опубликовано 9 июня, 2009 Автор Жалоба Поделиться Опубликовано 9 июня, 2009 SELECT(select ac.`username` FROM `account` ac WHERE ac.`id`=ab.id) as username,a.*FROM `account_banned` ab WHERE `active` = 1Сорри, но я не допер *16#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"SELECT (select ac.`username` FROM `account` ac WHERE ac.`id`=ab.id) as username' at line 1 Ссылка на комментарий
haha Опубликовано 9 июня, 2009 Жалоба Поделиться Опубликовано 9 июня, 2009 SELECT username FROM account t1, account_banned t2 WHERE t1.id=t2.id AND t2.active=1Может и не такой модный и навороченный запрос, но обычно работает.replyрад, что получилось.мораль сей проблемы такова: "НА*** вложенные запросы, где они не нужны" Ссылка на комментарий
D_Master Опубликовано 9 июня, 2009 Автор Жалоба Поделиться Опубликовано 9 июня, 2009 haha, спасибо, выручил! *123Всем спасибо за помощь, вопрос закрыт! Ссылка на комментарий
X-tender Опубликовано 13 июня, 2009 Жалоба Поделиться Опубликовано 13 июня, 2009 D_Master, сорри там в опечатался в одном месте, должно было быть:SELECT(select ac.`username` FROM `account` ac WHERE ac.`id`=ab.id) as username,ab.*FROM `account_banned` ab WHERE `active` = 1haha, ну во-первых, в моем варианте не дергаются ненужные данные в отличие от твоего джойна, в котором вся таблица аккаунт еще дергается. а во-вторых, сам по себе join не легче такого вложенного запроса (все равно выходит декартово произведение). Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти