MYSQL этот JOIN слишком многословен или это единственный способ?сортировка не работает - PullRequest
0 голосов
/ 04 февраля 2019

Я работаю над проектом с использованием процедурного PHP и phpmyadmin с движком InnoDB.Я не разработчик, не профессионал, я просто люблю веселиться с PHP, поэтому имейте это в виду, если я что-то не так (или если вы хотите предложить мне использовать объектно-ориентированный PHP) :).
У меня есть что-то вроде этого (просто и пример, на самом деле у меня много связанных таблиц и полей):

request(id, customer_id, field1, contact_id, field2)
customer(id, customer)
contact(id, contact)

Мне нужно вернуть строку id = 1 в таблице «request» со ссылочными значениями(не с номерами идентификаторов), поэтому мой результат должен быть таким: "Company X", value1, value2, "John".

Я могу получить это с помощью:

SELECT * FROM (
    (
    SELECT customer.customer
    FROM customer
    JOIN request ON customer.id=request.customer_id
    WHERE request.id=1
    ) as result1
    JOIN 
    (
    SELECT request.field1, request.field2
    FROM request
    WHERE request.id=1
    ) as result2
    JOIN 
    (
    SELECT contact.contact
    FROM contact
    JOIN request ON contact.id=request.contact_id
    WHERE request.id=1
    ) as result3
)

(я не знаю, могу ли я опустить "resultX""псевдонимы, но с phpmyadmin мне нужно иметь их, если нет, я получаю ошибку).

Теперь мои вопросы:

1- Это работает, но я чувствую, что это не правильный способ написаниякод, я думаю, что это может быть достигнуто лучше / умнее и с меньшим количеством кода, но я не знаю, как.
2- Как я могу перечислить результаты в другом порядке?Нравится: field2,customer,contact,field1?Я попытался разделить field1, field2 SELECT и изменить порядок в первой строке следующим образом:

SELECT result2,result1,result4,result3 FROM (
    (
    SELECT customer.customer
    FROM customer
    JOIN request ON customer.id=request.customer_id
    WHERE request.id=1
    ) as result1
    JOIN 
    (
    SELECT request.field1
    FROM request
    WHERE request.id=1
    ) as result2
    JOIN
    SELECT request.field2
    FROM request
    WHERE request.id=1
    ) as result3
    JOIN 
    (
    SELECT contact.contact
    FROM contact
    JOIN request ON contact.id=request.contact_id
    WHERE request.id=1
    ) as result4
)

, но он возвращает: "# 1054 - неизвестный столбец 'result2' в 'списке полей'"

Надеюсь, все понятно, заранее всем спасибо и поздравляю с одной из самых полезных страниц во всем Интернете:)

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете сделать несколько объединений одним и тем же выбором

SELECT customer.customer, request.field1, request.field2, contact.contact
FROM request 
JOIN customer ON request.customer_id = customer.id
JOIN contact  ON request.contact_id = contact.id

Вы можете расположить поля в нужном вам порядке.

...