Как сказал Том Х., ваш макет базы данных может быть плохой идеей, и вы можете пересмотреть его. Тем не менее, не существует действительно чистого решения, обеспечивающего необходимый набор результатов mysql. Но вы можете использовать что-то сумасшедшее с GROUP_CONCAT, как это, воспроизводя реальные данные с некоторой постобработкой на стороне PHP:
SELECT p.prd_cod, p.prd_name, GROUP_CONCAT(c.name_characteristic), GROUP_CONCAT(dc.description)
from product p,description_characteristic dc, characteristic c
where p.prd_cod = dc.prd_cod and
dc.id_ccharacteristic = c.id_characteristic and
p.cat_cod = 1
GROUP BY p.prd_cod
Это должно вернуть что-то вроде
Prd_cod Prd_name name_characteristic descript
1 pen Color,manufacturer pink,Apple
этот набор результатов должен быть обработан следующим образом:
$out = array();
foreach ($result as $res) {
$p = array_combine(
explode(",", $res["name_characteristic"]),
explode(",", $res["descript"]));
$p["prd_cod"] = $res["prd_cod"];
$out[] = $p;
}
Я бы не назвал это надежным решением, например - запятые в ваших значениях испортили все. Если вы хотите избежать такого безумия, вам придется постобработать уже полученный результат.
Но если вы хотите продемонстрировать некоторые безумные навыки агрегации sql (и вам, похоже, будет интересно, как вы выбрали этот макет базы данных), этот вариант для вас.