Ссылаясь на таблицу в прилагаемом изображении "Пример".
Наш гоночный клуб go kart использует программное обеспечение электронной коммерции для онлайн-регистрации. Каждая регистрация имеет уникальный номер в столбце coCartID. Затем все детали регистрации (Имя драйвера, Kart # и т.д. И т.д.) Имеют одинаковый статус в качестве параметров, поэтому все они отображаются в одном столбце coCartOption и идентифицируются заголовками в столбце coOptID.
Мне удалось отобразить отсортированный список последних регистраций:
$sql = "
SELECT coCartID, coOptGroup, coCartOption, coOptID
FROM cartoptions
WHERE coCartID > 2200 AND (coOptGroup = '*Driver Name:' OR coOptGroup = '*1st Class - $85:' OR coOptGroup = '1st Class - $100:' OR coOptGroup = '*1st Class Kart #:' OR coOptGroup = '1st Transponder #:' OR coOptGroup = '2nd Class - $25:' OR coOptGroup = '2nd Class Kart #:' OR coOptGroup = '2nd Transponder #:')
ORDER BY coCartID ASC, coOptID DESC
";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["coOptGroup"] . $row["coCartOption"] . "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
С приведенным выше кодом информация отображается с разрывами между каждой строкой, и я могу управлять только порядком, установив coOptID как восходящий или нисходящий:
Kari Hillwig
33
Стартовая мировая формула
Арман Корнелл
9193664
Мастер 100cc
99
Фред Блаувельт
Стартовая мировая формула
77
ВОПРОС 1: Как объединить все записи с одним и тем же идентификатором coCartID и отобразить в одной строке. Я потратил несколько разочаровывающих часов на fetch_assoc, fetch_array, & fetch_row, но независимо от того, что я не могу получить перерыв, размещенный в правильном месте:
Кари Хиллвиг, старший мировой Формулы, 33
Арман Корнелл, 100cc Мастер, 99, 9193664
Фред Блаувельт, старший мировой Формула, 77
ВОПРОС 2: Помимо ASC или DESC, можно ли отсортировать данные coOptID в определенном порядке? (Если это так, я могу отобразить соответствующие данные coCartOption в том же порядке).
Заранее спасибо,
Вы можете использовать следующий запрос для получения строки данных для каждого coCartID
для фиксированного номера. of coOptGroup
(s)
SELECT coCartID,
MAX(CASE WHEN coOptGroup = '*Driver Name:' THEN coCartOption ELSE NULL END) DriverName,
MAX(CASE WHEN coOptGroup IN('*1st Class - $85:','1st Class - $100:' ) THEN coCartOption ELSE NULL END) 1stClass,
MAX(CASE WHEN coOptGroup = '*1st Class Kart #:' THEN coCartOption ELSE NULL END) 1stClassKart,
MAX(CASE WHEN coOptGroup = '1st Transponder #:' THEN coCartOption ELSE NULL END) 1stClassTransponder,
MAX(CASE WHEN coOptGroup ='2nd Class - $25:' THEN coCartOption ELSE NULL END) 2ndClass,
MAX(CASE WHEN coOptGroup = '2nd Class Kart #:' THEN coCartOption ELSE NULL END) 2ndClassKart,
MAX(CASE WHEN coOptGroup = '2nd Transponder #:' THEN coCartOption ELSE NULL END) 2ndClassTransponder
FROM cartoptions
WHERE coCartID > 2200
AND (coOptGroup = '*Driver Name:'
OR coOptGroup = '*1st Class - $85:'
OR coOptGroup = '1st Class - $100:'
OR coOptGroup = '*1st Class Kart #:'
OR coOptGroup = '1st Transponder #:'
OR coOptGroup = '2nd Class - $25:'
OR coOptGroup = '2nd Class Kart #:'
OR coOptGroup = '2nd Transponder #:'
)
GROUP BY coCartID
ORDER BY coCartID ASC
когда вы выполняете над запросом, вы будете все значения, связанные с единственным coCartID
в $row
как $row["DriverName"]
, $row['1stClass']
... в каждой итерации цикла
Я бы сделал это, используя GROUP_CONCAT()
с параметрами ORDER BY
и SEPARATOR
, и IN
в WHERE
.
Демо: http://sqlfiddle.com/#!9/141e5f/6
SELECT GROUP_CONCAT(coCartOption
ORDER BY
FIELD (coOptGroup,
'*Driver Name:',
'*1st Class - $85:',
'1st Class - $100:',
'*1st Class Kart #:',
'1st Transponder #:',
'2nd Class - $25:',
'2nd Class Kart #:',
'2nd Transponder #:')
SEPARATOR ', ') AS csv
FROM cartoptions
WHERE coCartID>2200 AND
coCartOption!='(N/A)' AND
coOptGroup IN (
'*Driver Name:',
'*1st Class - $85:',
'1st Class - $100:',
'*1st Class Kart #:',
'1st Transponder #:',
'2nd Class - $25:',
'2nd Class Kart #:',
'2nd Transponder #:')
GROUP BY coCartID
ORDER BY coCartID
Этот запрос должен быть достаточно простым для понимания и обновления в будущем.
См. Мою демонстрационную ссылку для чистого трехстрочного набора с одним столбцом.