Я работаю над проектом с использованием процедурного PHP и phpmyadmin с движком InnoDB. Я не разработчик, не профессионал, я просто люблю веселиться с PHP, поэтому имейте это в виду, если я скажу что-то не так (или если вы хотите предложить мне использовать объектно-ориентированный PHP) :).
У меня есть что-то вроде этого (просто и пример, на самом деле у меня много связанных таблиц и полей):
request(id, customer_id, field1, contact_id, field2)
customer(id, customer)
contact(id, contact)
Мне нужно вернуть строку id = 1 в таблице "request" со ссылочными значениями (не с номерами id), поэтому мой результат должен быть таким: "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 "в" списке полей ""
Надеюсь, все понятно, заранее всем спасибо и поздравляю с одной из самых полезных страниц во всем интернете :)
Вы можете сделать несколько объединений в одном выборе
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
Вы можете разместить поля в нужном вам порядке.
result2
- это имя таблицы, и вы пытаетесь использовать его в качестве имени поля. Вы можете изменить псевдоним поля на другой, используяAS