DB выберите две таблицы

#php #mysql #sql #select

#php #mysql #sql #выберите

Вопрос:

Я искал вокруг и, похоже, не могу понять, как заставить это работать. По крайней мере, не так, как написан мой код. У меня возникли проблемы с изменением этого:

 // ...
$sql3 = new db;
$sql3->db_Select(DB_TABLE_ROSTER_TEAM_MEMBERS, "*", "team_id = ".intval($row1['team_id'])." ORDER BY member_team_order");

while($row3 = $sql3->db_Fetch()) {
// ...
  

…к чему-то, что упорядочивается по столбцу status_order , который находится в другой таблице DB_TABLE_ROSTER_MEMBER_STATUS . По сути, я пытаюсь включить 2 таблицы в один и тот же SELECT запрос, чтобы я мог изменить ORDER BY . Кто-нибудь может объяснить, как это делается? Буду признателен за любую помощь. Спасибо.

Обновить

Я попытаюсь объяснить это настолько, насколько смогу. Надеюсь, кто-нибудь сможет объяснить мне так, как я могу понять.

По умолчанию этот код предназначен для захвата пользователей и размещения их в соответствующем «team_id», а затем упорядочивает их с помощью выпадающего списка, который позволяет мне изменять порядок. Однако часть, которая упорядочивает участников, не работает, поэтому я решил, что хочу, чтобы она автоматически упорядочивалась по статусу участника, который находится в другой таблице. Другая таблица содержит имена команд и порядок команд, а также другие данные, которые сейчас не нужны. Я даже не знал, возможно ли это.

Чуть дальше есть другой код, который также может помочь, поскольку он показывает структуру таблицы. Это то, что придает именам цвет, как показано на сайте, о котором я упоминал.

Надеюсь, я помог объяснить это немного подробнее.

И еще кое-что, запрошенное Йоханом

Вот структура двух таблиц.

roster_team_members поля:

 member_id
member_name
team_id
team_name
game_id
game_name
member_team_status
text_color
member_team_order
  

roster_member_status поля:

 status_id
status_name
text_color
status_order
display
  

Iv решил исправить порядок членов вручную. iv обнаружил ошибку при отладке. если я не могу понять, как это исправить, я задам другой вопрос. спасибо всем за вашу помощь. я просто решил пойти другим путем, который должен оказаться проще.

Комментарии:

1. не могли бы вы предоставить немного больше информации, во-первых, о другой таблице в запросе, кроме DB_TABLE_ROSTER_MEMBER_STATUS, а также о том, как эта другая таблица связана с DB_TABLE_ROSTER_MEMBER_STATUS, пожалуйста?

2. DB_TABLE_ROSTER_TEAM_MEMBERS включает пользователей, команду пользователей и несколько других, но там нет ничего, что я хотел бы упорядочить. в DB_TABLE_ROSTER_MEMBER_STATUS есть ранги членов и ранговые порядки, по которым я хотел бы упорядочить. Я не совсем уверен, как ответить на ваш вопрос. но если вы пойдете сюда — teamdtk.com/e107_plugins/jbroster_menu/jbroster.php и посмотрите, например, на отряд 2, я хотел бы упорядочить его по отрядам, который находится в таблице DB_TABLE_ROSTER_MEMBER_STATUS.

3. Sarge88, добро пожаловать в stackoverflow. Если вы хотите получить ответы хорошего качества, вам нужно будет написать ответ хорошего качества. Лучший способ в этом случае: A: опишите задействованные таблицы с использованием ascii -кода, B: опишите результат, который вы хотите снова, используя ascii-код, пожалуйста , C: расскажите нам очень коротко, почему вы этого хотите, и D: дайте нам запрос, с которым вы пытались и потерпели неудачу. Если вы сделаете это, 100% правильный ответ должен появиться в течение нескольких минут.

4. спасибо, Йохан. хорошо, я сделаю подробное описание того, что находится в обеих этих таблицах, и что я хочу сделать. idk, что вы подразумеваете под ascii-искусством, но я делаю все возможное, чтобы его было легко понять. дайте мне несколько минут на завершение…

5. IDK, если это поможет, но полный код здесь — pastebin.com/KRGdy5Ve строка 519 — это то, что я пытаюсь изменить. в строке 575 также есть потенциальный код, который может быть проще упорядочить.

Ответ №1:

Как выглядит ваш db_select() метод? Используете ли вы Drupal?

Ваш необработанный SQL-запрос будет выглядеть примерно так:

 SELECT table1.* FROM table1, table2 WHERE table1.link_column = table2.link_column AND table1.team_id = 'Your team ID' ORDER BY table2.member_team_order
  

Не зная точно, как db_select() работает ваш метод, я не могу точно сказать вам, как это сделать.

Комментарии:

1. Я использую cms под названием E107, я все еще новичок в php, поэтому меня смущает то, что вы подразумеваете под методом DB_Select. Где я могу это найти?

2. db_Select() Метод определен в классе db . Когда вы это делаете $sql3 = new db; , вы создаете новый экземпляр вызываемого класса db , а когда вы это делаете $sql3->db_Select() , вы вызываете метод, вызываемый db_Select() из объекта $sql3 , который имеет класс db . Где-нибудь в вашем коде есть целая куча кода, завернутого во что-то похожее на это: class db { ...code here... } ?

3. -1 для использования неявных объединений, отбросьте этот анти-шаблон, выйдите из 1989 и вместо этого используйте явные объединения.

4. я думаю, что это может быть расположено в другом файле php. я постараюсь его найти. дайте мне минуту, я не смог найти ничего подобного в этом коде или в коде, который он «включает».

5. @Johan Я не могу спорить с принципом, но я чувствую, что это делает его более читаемым (в основном потому, что, я полагаю, именно так я его изучил в первую очередь). Есть ли для этого какая-либо заметная причина, связанная с производительностью?

Ответ №2:

Попробуйте выполнить этот запрос:

 select a.*,b.rank
from DB_TABLE_ROSTER_TEAM_MEMBERS a INNER JOIN DB_TABLE_ROSTER_MEMBER_STATUS b
ON a.member_id = b.member_id
order by b.rank;
  

Мне пришлось сделать предположение, что связующий столбец между DB_TABLE_ROSTER_TEAM_MEMBERS и DB_TABLE_ROSTER_MEMBER_STATUS называется ‘member_id’, а столбец, по которому вы хотите ранжировать в DB_TABLE_ROSTER_MEMBER_STATUS, называется ‘rank’.

Комментарии:

1. я даже не знаю, с чего начать добавлять это lol. я привык к простым командам db_select. от и от и сбивает с толку. я новичок, которого я знаю, но я делаю все возможное, чтобы изучить этот материал, и, к сожалению, я многого из этого не понимаю. заставляет меня чувствовать себя глупо, лол

Ответ №3:

Чтобы объединить две таблицы, вы используете join предложение.

Что-то вроде:

 SELECT booking.`date`, customer.name 
FROM booking
INNER JOIN customer ON (customer.id = booking.customer_id)
WHERE customer.name = 'Sarge' 
ORDER BY booking.`date` DESC
  

Если у вас есть таблицы с одинаковым макетом, вы можете использовать UNION .

   SELECT customer_USA.name, customer_USA.country
  FROM customer_USA
UNION ALL
  SELECT customer_NL.name, customer_NL.country
  FROM customer_NL
  

Это объединит все записи для обеих таблиц в один большой результирующий набор.

Я бы дал вам правильный запрос для вашего случая, но я понятия не имею, чего вы хотите, а предоставленные вами ссылки требуют слишком много изучения, убивая удовольствие от головоломки.

Комментарии:

1. я думаю, что информация, которую вы ищете, приведена выше. надеюсь. я перегружен ответом на код, поэтому я все еще пытаюсь разобраться во всем этом.