Добавление нескольких результатов MySQL в одну ячейку в таблице HTML с использованием переполнения стека

В настоящее время я использую следующий код, чтобы получить данные для отображения так, как я хочу, в разделе контента на моей домашней странице:

$query = "SELECT distinct category FROM listings";
$result = mysql_query($query);
$catNo = 1;

echo "<table> <tr>";

while($row = mysql_fetch_array($result)){
echo "<td>" . $row['category'] . "</td>";
if ($catNo % 3 == 0) {
echo "</tr><tr>"}
$catNo++;
}

echo "</tr> </table>";

Что приводит к этому:

| CAT1 | CAT2 | CAT3 |
| CAT4 | CAT5 | CAT6 |

Могу ли я сохранить ссылку в базе данных, которая означает, что после нажатия на ячейку, я перехожу на эту ссылку? Можно ли также сохранить изображение в базе данных и отобразить его в ячейке с названием категории?

Любая помощь будет принята с благодарностью.

Благодарю.

2

Решение

Поскольку вы используете различные для получения результатов, для меня это означает, что в этой таблице больше строк с одинаковой категорией. Если это правильно, то вы должны создать другую таблицу, называемую «lists_links», чтобы хранить каждую ссылку и изображение только один раз, а затем присоединить эту таблицу к таблице списков.

CREATE TABLE listings_links(
id INT AUTO_INCREMENT NOT NULL,
category CHAR(10) NOT NULL, //Use here the exact type you used in the listings table
link VARCHAR(200) NOT NULL,
image_path VARCHAR(200) NOT NULL,
PRIMARY KEY(id),
KEY(category));

Тогда используйте это:

<?php
$sql  = "SELECT distinct listings.category, listings_links.link, listings_links.image_path FROM listings ";
$sql .= "LEFT JOIN listings_links on (listings.category=listings_links.category) "$sql .= "ORDER BY 1;";
$result = mysql_query($sql) or die(mysql_error()."<br>".$sql);
$catNo = 1;

echo "<table> <tr>";

while($row = mysql_fetch_array($result)){
echo '<td><a href="'.$row['link'].'"><img src="'.$row['image_path'].'" border="0" />'.$row['category'].'</a></td>';
if ($catNo % 3 == 0) {
echo "</tr><tr>";
}
$catNo++;
}

echo "</tr> </table>";
?>

Для лучшей производительности (если у вас много категорий) сделайте также индекс «категория» в вашей таблице списков.

ОБНОВИТЬ:
Я также рекомендую хранить изображения в файловой системе вместо базы данных. Таким образом, страница будет загружаться быстрее (браузер может загружать больше изображений параллельно), и вам не придется возиться с загрузкой изображений в базу данных (вы всегда должны делать это при обновлении изображения категории), и код сложнее тоже. Но это можно сделать, но не рекомендуется.

ОБНОВЛЕНИЕ 2:
Вы не просили об этом, но на вашем месте я не храню ни ссылку, ни путь к изображению в БД. Я рекомендую создать PHP, который может показывать то, что вы хотите по его параметру (например, show_cat.php? Cat1) и использовать его в ссылке и хранить все изображения так, как я могу напрямую ссылаться на них по имени категории (например: /images/categories/cat1.jpg, /images/categories/cat2.jpg и т. д.).
Таким образом, вам не нужно изменять свою БД, вам нужно только добавить ссылку и путь к изображению в цикл. Если вы хотите, вы также можете проверить файл изображения, который существует или нет, и показать вместо него изображение «Нет изображения».

1

Другие решения

Попробуйте что-то вроде этого:

<?php
$query = "SELECT distinct category,link,image FROM listings";
$result = mysql_query($query);
$catNo = 1;

echo "<table> <tr>";

while($row = mysql_fetch_array($result)){
echo '<td><a href="'.$row['link'].'">'.$row['category'].'</td>';
echo '<td><img src ="/path/to/image/'.$row['image'].'"></td>';
if ($catNo % 3 == 0) {
echo "</tr><tr>";
}
$catNo++;
}

echo "</tr> </table>";
?>
0

По вопросам рекламы [email protected]