С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65

Как взять значения из двух таблиц

17.07.2014, 21:17. Показов 2447. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть таков.
Имеется первая таблица. Данные в ней хранятся таким образом (ID, Nick, Rang, Group). Например (12, Василий, 8, Admins)
То есть ID = 12, Nick = Василий, Rang = 8.

Имеется вторая таблица. Данные в ней хранятся таким образом (ID, Group, Rang_1, Rang_2, Rang_3 и т.д. до 13). Например (1, Admins, Глава)
То есть ID = 1, Group = Admins, Rang_8 = Глава.

Суть в том что мне нужно вывести информацию о этом человеке, Василии. Но мне не нужно выводить Rang 8, потому что у меня есть вторая таблица, в которой и хранятся названия этих рангов. (Глава например)
То есть мне нужно вывести всю информацию о человеке, но не с его номером ранга, а именно название ранга

Как это реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2014, 21:17
Ответы с готовыми решениями:

Как из двух таблиц добавить значения в третью?
Всем привет! Я совсем не разбираюсь в БД, хоть вроде задача проста но возникают проблемы. Есть две таблицы "Конденсаторы" и...

Взять 2 значения из таблиц и перемножить
Нужно вывести таблицу с заками. Выводится 1 таблица , где указано имя и время работы рабочего его нужно умножить на индекс из 2-й...

Как соединить значения с двух таблиц в MySQL в одну связывающую через .js в форме
Всем добрый день! Помогите пож. даже идеи нет. Суть у меня 3-и таблицы в БД, мне надо как-то заполнить третью таблицу связующую через...

28
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
17.07.2014, 22:15
Цитата Сообщение от anar4you Посмотреть сообщение
Имеется вторая таблица. Данные в ней хранятся таким образом (ID, Group, Rang_1, Rang_2, Rang_3 и т.д. до 13). Например (1, Admins, Глава)
То есть ID = 1, Group = Admins, Rang_8 = Глава.
Не правильная структура таблицы
По уму должно быть так:
Rang_Id, Rang_Name
1, шестёрка
2, новобранец
3, сержант
......
100500, генералисимус


тогда запрос:
SQL
1
2
3
SELECT `ID`, `Nick`, `Vtoraja_tablica`.` Rang_Name` AS `Rang`
FROM `Pervaja_tablica`
INNER JOIN `Vtoraja_tablica` ON `Pervaja_tablica`.`Rang` = `Vtoraja_tablica`.`Rang_Id`
0
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
17.07.2014, 23:37  [ТС]
Вы меня наверно не поняли.
Вот скриншот примерной структуры (данные) второй таблицы.



А вот первая



Видите, там Rank = 13. А мне нужно вывести название этого ранга!
Ранг брать нужно из второй строки ID которой равно полю Leader или полю Member в первой таблице

как сделать то?
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
17.07.2014, 23:54
Я как раз понял правильно. У тебя структура таблицы создана через одно место.
0
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
18.07.2014, 00:02  [ТС]
Цитата Сообщение от BarbosLV Посмотреть сообщение
Я как раз понял правильно. У тебя структура таблицы создана через одно место.
Ну мне нужна именно такая структура, потому что в ней хранятся не только ранги. Это таблица с группами, у каждой группы есть 13 рангов
0
12 / 12 / 12
Регистрация: 01.07.2014
Сообщений: 106
18.07.2014, 00:31
Цитата Сообщение от anar4you Посмотреть сообщение
Ну мне нужна именно такая структура, потому что в ней хранятся не только ранги. Это таблица с группами, у каждой группы есть 13 рангов
То есть вы будете сравнивать камень и воздух? Это образно, конечно, но смысл тот же. Ничего ведь не мешает добавить в таблицы по 1 полю, какой нить id_sr к примеру. И по нему сравнивать. В вашем же случае не за что зацепиться при сравнении.
Простой пример.
Таблица 1:
HTML5
1
айди, юзверь, ранг
В ней значения:
HTML5
1
1, админ, 3
Таблица 2:
HTML5
1
ранг, ранг_расшифровка
В ней значения:
HTML5
1
2
3
1, пользователь
2, модератор
3, администратор
В таком случае не составит труда расшифровать По айди ранг пользователя. Делается это чисто для оптимизации размера БД, при большом количестве записей в ней. В иных случаях все это смысла не имеет.
0
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
18.07.2014, 10:31  [ТС]
Да вы меня опять не поняли. Я же говорю таблица нужна именно в таком формате или я могу лишь изменить названия полей с Rank_1 на просто 1. Тогда так можно будет сделать?
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
18.07.2014, 12:14
Цитата Сообщение от anar4you Посмотреть сообщение
Да вы меня опять не поняли.
Это ты в упор не понимаешь что данная структура не правильная и не может служить грамотной основой для связи таблиц. Да можно задать чёткое условие для запроса через переменные, но нельзя связать таблицы между собой.
То есть при такой структуре надо 2 запроса и дополнительные данные так как не ясно с какой строки вытаскивать. Короче это порно, которое в будущем доставит не мало проблем.
0
 Аватар для amadey18
92 / 92 / 51
Регистрация: 29.04.2013
Сообщений: 361
18.07.2014, 14:18
Лучший ответ Сообщение было отмечено anar4you как решение

Решение

anar4you, полностью согласен с BarbosLV, потому что структура слишком безумная.
2 запроса и дополнительные данные так как не ясно с какой строки вытаскивать
я так понял что вы имели ввиду:
1) первый запрос вытаскивает ID, nickname, rank из той большой таблицы.
2) Из этих данных вы выбираете rank и заносите в переменную php
2,1) с помощью переменной ищете название ранга
3) должно выйти что то этого
PHP
1
2
3
4
5
//... запрос в базу где берем ранг
 
$variable_rank = 13; // сюда вставляем номер ранга
$ggg = 'select id,name, rank_'.$variable_rank.' from table... where ...'; // ищем
echo $ggg; // получаем нужный запрос.
1
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
18.07.2014, 16:33  [ТС]
Цитата Сообщение от amadey18 Посмотреть сообщение
я так понял что вы имели ввиду:
1) первый запрос вытаскивает ID, nickname, rank из той большой таблицы.
2) Из этих данных вы выбираете rank и заносите в переменную php
2,1) с помощью переменной ищете название ранга
3) должно выйти что то этого
ДА!!!!!!!!!!! ИМЕННО ТАК! То есть можно было просто подставить к слову Rang_ . $perem...
Как я не дадумался))) Спасибо щас буду пробовать
0
 Аватар для amadey18
92 / 92 / 51
Регистрация: 29.04.2013
Сообщений: 361
18.07.2014, 16:53
все таки воспользуйтесь советом, данным ранее, и переделайте немного базу, ибо это намного упростит ее использование.
0
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
18.07.2014, 17:10  [ТС]
Сделал по примеру Вашего кода:
Получаю данные аккаунта, чтобы оттуда взять № ранга.
PHP
1
2
$query = $this->db->query("SELECT * FROM `accounts` WHERE `NickName` = '".$this->session->userdata('login')."'");
$row = $query->row();
PHP
1
2
$ggg = 'SELECT Rank_'.$row->Rank.' FROM orgsinfo WHERE ID = '.$row->Member.' OR ID = '.$row->Leader.''; // ищем
echo $ggg; // получаем нужный запрос.
echo вывело:
PHP
1
SELECT Rank_13 FROM orgsinfo WHERE ID = 0 OR ID = 3
А как мне теперь вывести только значение ранга? А не весь запрос?)

Добавлено через 3 минуты
Цитата Сообщение от amadey18 Посмотреть сообщение
все таки воспользуйтесь советом, данным ранее, и переделайте немного базу, ибо это намного упростит ее использование.
Да мне она ненужна переделанная! Она связанна с игровым сервером. Она корректно сделана, просто Вы не понимаете для чего это нужно. А нужно это для того чтобы игрок мог в будущем редактировать названия рангов, своей группы!

Добавлено через 8 минут
Точнее вот такой второй запрос:
PHP
1
2
3
$query4 = $this->db->query("SELECT `Rank_$row->Rank` FROM `orgsinfo` WHERE `ID` = '.$row->Member.' OR ID = '.$row->Leader.'");
$row4 = $query4->row();
echo $row4;
Выводит Array
0
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
19.07.2014, 20:13  [ТС]
помогите кто нибудь, как вывести только ранг

PHP
1
2
3
4
5
6
$query = $this->db->query("SELECT * FROM `accounts` WHERE `NickName` = '".$this->session->userdata('login')."'");
$row = $query->row();
 
$query4 = $this->db->query("SELECT `Rank_$row->Rank` FROM `orgsinfo` WHERE `ID` = '.$row->Member.' OR `ID` = '.$row->Leader.'");
$row4 = $query4->row();
echo $row4;
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
19.07.2014, 21:52
Как же тебе помочь если ты тут самый умный? Ну ладно не желаешь привести таблицу к нормальному виду, в конце концов твои проблемы. Но объясни хотя бы как связаны строки из второй таблицы с первой таблицей. Я лично связи не увидел. Ладно связь по столбцам ясна но должна ещё быть связь по строкам.
0
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
19.07.2014, 22:53  [ТС]
Смотри) В первом запросе я извлекаю все данные из таблицы с аккаунтами игроков, где ник игрока равен логину, записанному в сиссии...

Далее я пишу второй запрос. Выбрать Rank_$row->Rank (Сюда подставляю ранг игрока который хранится в первой таблице в числовом виде, например 13) где айди группы игроков (вторая таблица) равна группе игроков в которой находится игрок или лидер.

Эти два запроса работают. Но я не знаю как вывести то что мне нужно.
Поэтому и прошу помощи. А вторая моя таблица, она вполне корректна, просто Вы наверно еще не сталкивались с тем, что нужно реализовать мне.
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
19.07.2014, 23:01
Последний раз спрашиваю. Где связь по строкам?
Цитата Сообщение от anar4you Посмотреть сообщение
А вторая моя таблица, она вполне корректна, просто Вы наверно еще не сталкивались с тем, что нужно реализовать мне.
Это я даже не обсуждаю. Как говорится подрастёшь сам поймёшь.
0
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
19.07.2014, 23:40  [ТС]
Цитата Сообщение от BarbosLV Посмотреть сообщение
Последний раз спрашиваю. Где связь по строкам?
Строка Member и Leader в первой таблице равны строке ID во второй таблице
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
20.07.2014, 00:32
Лучший ответ Сообщение было отмечено anar4you как решение

Решение

SQL
1
2
3
4
SELECT `ID`, `NickName`, `orgsinfo`.`$rank` AS `Rank`
FROM `accounts`
INNER JOIN `orgsinfo` ON `accounts`.`Member` = `orgsinfo`.`ID`
WHERE `NickName` = 'Primer'
$rank-должен содержать Rank_ плюс результат
SQL
1
2
3
SELECT `Rank`
FROM `accounts`
WHERE `NickName` = 'Primer'
1
 Аватар для anar4you
4 / 0 / 0
Регистрация: 16.07.2014
Сообщений: 65
20.07.2014, 20:35  [ТС]
Спасибо большое за помощь, но у меня ошибка вылетает.
Вот скриншот:


Вот код:
PHP
1
2
3
4
$rank = 'Rank_'.$row->Rank.'';
$query4 = $this->db->query("SELECT `ID`, `NickName`, `orgsinfo`.`$rank` AS `Rank` FROM `accounts` INNER JOIN `orgsinfo` ON `accounts`.`Member` = `orgsinfo`.`ID` OR `accounts`.`Leader` = `orgsinfo`.`ID` WHERE `NickName` = '.$row->NickName.'");
$row4 = $query4->row();
echo $row4;
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
20.07.2014, 20:40
`ID` есть в обоих таблицах? значит надо указывать чётко
SQL
1
2
3
4
SELECT `accounts`.`ID`, `NickName`, `orgsinfo`.`$rank` AS `Rank`
FROM `accounts`
INNER JOIN `orgsinfo` ON `accounts`.`Member` = `orgsinfo`.`ID`
WHERE `NickName` = 'Primer'
и там в конце
WHERE='.ник.'- так и надо с точками?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.07.2014, 20:40
Помогаю со студенческими работами здесь

Нужно передать значения из двух таблиц
Здравствуйте. Нужна помощь. Я с qt оч плохо знаком. Вобщем, в приведенном ниже коде переменным m,n,r передаются значения из спинбоксов...

Как с 2-х таблиц взять по столбцу ?
Прошу помогите мучаюсь 2 дня, как взять по 1 сталбцу с 2-х таблиц Form7.ADOQuery1.SQL.Text:='SELECT * FROM Таблица1,Таблица2

вставить значения из двух таблиц в выпадающий селект
Всем привет! есть 2 таблицы: turnir id turnir_name nomination id nomin_name t_id номинации (одна или несколько)...

Оптимизировать макрос, сравнивающий значения в столбцах двух различных таблиц Word
Sub sravnenie() Dim i,j,iCount9, iCountn As integer iCount9=ActiveDocument.Tables(9).Rows.Count ...

Как сложить или вычесть значения из разных таблиц в Access 2010? А конкретно значения столбцов
Как сложить или вычесть значения из разных таблиц в Access 2010? А конкретно значения столбцов Ну и любое другое действие.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru