2013-07-02 2 views
0

Ну, я не мог быть очень конкретным в вопросе в названии, поэтому простите меня.Прочитать несколько таблиц из базы данных mySQL?

Я сделал сценарий .php, который считывает данные из моей базы данных и печатает их в таблицу на странице. В принципе, он должен действовать как запрет. Но я застрял с одной проблемой. Поскольку запрет сортируется в нескольких разных таблицах в базе данных, я должен прочитать их все для конкретных подробностей, которые мне нужны на banlist. Я получил большую часть этого, но я не могу получить имя администратора, который запретил «читер». Вот как вещь «admin_id» находится в таблице «штрафы», а имя администратора находится в таблице «клиенты». Теперь я не могу понять, как получить имя администратора из таблицы «clients» «admin_id» из таблицы «штрафы» и распечатать его на той же странице.

Так что this - это то, что я сделал, и просто отсутствует имя «Админ».

Вот код, который считывает текущую информацию из базы данных.

mysql_query("SELECT penalties.id, penalties.type, penalties.time_add, penalties.time_expire, 
        penalties.reason, penalties.inactive, penalties.duration, penalties.admin_id, 
        target.id as target_id, target.name as target_name, target.ip as target_ip 
      FROM penalties, clients as target 
      WHERE (penalties.type = 'TempBan' OR penalties.type = 'Ban') 
        AND inactive = 0 
        AND penalties.client_id = target.id 
      ORDER BY penalties.id DESC") 
    or die(mysql_error()); 
+0

Вам необходимо использовать соединение. – Pitchinnate

+0

Вы хотите услышать о [mysql JOIN] (http://stackoverflow.com/questions/7877720/the-best-tutorial-on-joins-in-mysql). – moonwave99

+0

Рекомендуется использовать расширения mysqli или PDO_MySQL. Не рекомендуется использовать старое расширение mysql для новой разработки. http://php.net/manual/en/book.mysqli.php http://php.net/manual/en/book.pdo.php –

ответ

1

Это должно направить вас в правильном направлении:

SELECT 
penalties.id, penalties.type, penalties.time_add, penalties.time_expire, penalties.reason, penalties.inactive, penalties.duration, penalties.admin_id, 
clients.id as target_id, clients.name as target_name, clients.ip as target_ip 
FROM penalties 
LEFT JOIN clients 
ON penalties.client_id = clients.id 
WHERE (penalties.type = 'TempBan' OR penalties.type = 'Ban') AND inactive = 0 
ORDER BY penalties.id DESC 
+0

Разве это не только вернет имя мошенника? – xQbert

0

У вас есть два логических объединений от штрафов обратно клиентам. поэтому вам нужно два соединения обратно. Один для «Целевой» для «Администратора»

SELECT penalties.id, penalties.type, penalties.time_add, penalties.time_expire, penalties.reason, 
     penalties.inactive, penalties.duration, penalties.admin_id, target.id as target_id, 
     target.name as target_name, target.ip as target_ip, 
     admin.name 
FROM penalties, clients as target, clients as admin 

WHERE (penalties.type = 'TempBan' OR penalties.type = 'Ban') 
    AND inactive = 0 
    AND penalties.client_id = target.id 
    AND penalties.admin_ID = admin.id 

ORDER BY penalties.id DESC 
+0

Спасибо большое, проблема решена. – W4RL10N

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