Перейти к содержанию

[решено] Выборка из двух разных таблиц БД MySQL


Рекомендуемые сообщения

Дано:

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
Ссылка на комментарий

попробуй это не в цикле, а перед циклом

$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))
{

Ссылка на комментарий
попробуй это не в цикле, а перед циклом

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

Ссылка на комментарий

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

Ссылка на комментарий

SELECT username FROM account t1, account_banned t2 WHERE t1.id=t2.id AND t2.active=1

Может и не такой модный и навороченный запрос, но обычно работает.

reply

рад, что получилось.

мораль сей проблемы такова: "НА*** вложенные запросы, где они не нужны"

Ссылка на комментарий

D_Master, сорри там в опечатался в одном месте, должно было быть:

SELECT

(select ac.`username` FROM `account` ac WHERE ac.`id`=ab.id) as username,

ab.*

FROM `account_banned` ab WHERE `active` = 1

haha, ну во-первых, в моем варианте не дергаются ненужные данные в отличие от твоего джойна, в котором вся таблица аккаунт еще дергается. а во-вторых, сам по себе join не легче такого вложенного запроса (все равно выходит декартово произведение).

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...