У меня есть следующий MySql структуру таблицы:объединить три таблицы и подсчитать конкретное значение с MySQL
Table 'company' Table 'serial' Table 'product'
+----+--------------+ +-------------------+--------+ +-----+---------+
| id | name | | serial |cid | | nr | name |
+----+--------------+ +-------------------+--------+ +-----+---------+
| 1 | One Inc. | | 100A000001 | 1 | | 100 | Phone |
| 2 | Two Corp. | | 100A000002 | 1 | | 101 | Ball |
| 3 | Three Corp. | | 102A000003 | 1 | | 102 | Egg |
| 4 | Four Inc. | | 103A000004 | 2 | | 103 | Box |
| 5 | Five Inc. | | 103A000005 | 3 | | 104 | Cable |
+----+--------------+ | 101A000006 | 4 | +-----+---------+
| 102A000007 | 4 |
| 103A000011 | 5 |
| 103A000010 | 5 |
| 104A000007 | 5 |
| 104A000008 | 5 |
| 103A000009 | 5 |
+-------------------+--------+
краткое описание, как они работают вместе:
- ИДС в таблице «Последовательный ' является фирмой id из таблицы ' компания '
- nr в таблице «продукт» определяет, как должны быть первые три цифры серийного номера для желаемого продукта.
Что мне нужно сделать, это выход, как это:
+-------------+--------------------------------------+
| Customer | Products |
+-------------+--------------------------------------+
| One Inc. | Phone (2), Egg (1) |
+-------------+--------------------------------------+
| Two Corp. | Box (1) |
+-------------+--------------------------------------+
| Three Corp. | Box (1) |
+-------------+--------------------------------------+
| Four Inc. | Phone (1), Ball (1) |
+-------------+--------------------------------------+
| Five Inc. | Box (3), Cable (2) |
+-------------+--------------------------------------+
Но я не знаю, как написать запрос!
Мое решение на данный момент следующий запрос:
SELECT
c.name,
s.serial
FROM
company c
INNER JOIN
serial s
ON
c.id = s.cid
ORDER BY
c.name DESC
это формирует выходной сигнал, как это:
+-------------+--------------+
| Customer | Serial |
+-------------+--------------+
| One Inc. | 100A000001 |
| One Inc. | 100A000002 |
| One Inc. | 102A000003 |
| Two Corp. | 103A000004 |
| Three Corp. | 103A000005 |
| Four Inc. | 101A000006 |
| Four Inc. | 102A000007 |
| Five Inc. | 103A000011 |
| Five Inc. | 103A000010 |
| Five Inc. | 104A000007 |
| Five Inc. | 104A000008 |
| Five Inc. | 103A000009 |
+-------------+--------------+
На данный момент я использую этот вывод и с PHP Я генерируя желаемый результат, но было бы здорово сделать это без большого количества PHP.
Так что я прошу: Как я могу решить это с помощью хорошего mySQL-запроса, чтобы получить выход, как описано выше?
Если вы в состоянии это сделать, вы должны по-разному разбить столбец Serial так, чтобы он имел FK в таблице Product, а фактический столбец Serial - это что-то вроде «A000001». Как и сейчас, это частично производная область. Это сделает его более удобным для вас. Кроме того, FK - это сильные отношения. Это можно использовать для обеспечения целостности данных. В противном случае кто-то мог бы поместить что-то вроде «ABCA000001», и у вас не было бы хорошего способа понять, что «ABC» - это не продукт –