#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. я думаю, что информация, которую вы ищете, приведена выше. надеюсь. я перегружен ответом на код, поэтому я все еще пытаюсь разобраться во всем этом.