Для каждого результата, возвращаемого SQL-запросом, я хочу дать другое имя - PullRequest
0 голосов
/ 23 октября 2011

Мой оператор SQL выглядит как

SELECT beds.id,beds.name,beds.brand,beds.price,beds.disprice,feature.feature AS feature 
FROM beds,feature,bedFeatures 
WHERE bedFeatures.featureID = feature.id AND bedFeatures.bedID = beds.id

Я получаю этот результат

id  name        brand   price   disprice    feature
10  Big Sleeper ZZZZ    10000   1           Oak
10  Big Sleeper ZZZZ    10000   1           Ash
10  Big Sleeper ZZZZ    10000   1           White

Я хочу, чтобы AS давал каждой функции уникальное имя, например, feature1 feature2 feature3, чтобы эти 4 строки отображались в одной. Это возможно?

Вывод, который я ищу, будет выглядеть примерно так:

id  name        brand   price   disprice    feature1 feature2 feature3
10  Big Sleeper zzzz    1000    1           Oak      Ash      White

Ответы [ 2 ]

6 голосов
/ 23 октября 2011

Точный вывод, который вы запрашиваете, не так легко получить, кроме как с помощью GROUP_CONCAT() для перечисления элементов в виде списка через запятую, а не отдельных столбцов.

Поскольку не существует фиксированного набора возможных функцийобщий для всех ваших продуктов, вы не сможете использовать сводный запрос.

Я бы порекомендовал использовать GROUP_CONCAT(), чтобы получить функции в виде списка через запятую, а затем разделить их на части PHP с помощью PHP.прикладной уровень.

SELECT
  beds.id,
  beds.name,
  beds.brand,
  beds.price,
  beds.disprice,
  GROUP_CONCAT(feature) AS features
FROM
  beds
  JOIN bedFeatures ON beds.id = bedFeatures.bedID
  JOIN features ON features.id = bedFeatures.featureID
GROUP BY beds.id, beds.name, beds.brand, beds.price, disprice

Вывод этого будет выглядеть следующим образом:

d  name        brand   price   disprice    features
10  Big Sleeper zzzz    1000    1           Oak,Ash,White

В вашем PHP при извлечении результатов explode() объекты в массив:

$resultset = array();
while ($row = mysql_fetch_assoc($result)) {
  // First append the whole row onto the result set as it is...
  $resultset[$row['id']] = $row;
  // Overwrite the `features` string with an array instead...
  $resultset[$row['id']]['features'] = explode(",", $row['features']);
}

Наконец, доступ к функциям в вашем приложении:

foreach ($resultset as $r) {
  echo $r['features'][0];
  echo $r['features'][1];
  echo $r['features'][2];
  echo $r['features'][3];
}
0 голосов
/ 23 октября 2011

Вы ищете GROUP_CONCAT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...