@Artemka1903

Как получить список из массива без дублей?

Всем привет! Не могу разобраться, как получить список категорий из массива без дублей. Вот код
public static function getRightCategories()
    {
        $db = Db::getConnection();
        $sql = $db->query('SELECT category FROM news');
        $i = 0;
        $rightCategories = array();
        while ($row = $sql->fetch()) {
            $rightCategories[$i]['category'] = $row['category'];
            $i++;
        }
        return $rightCategories;
    }
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
roswell
@roswell
и швец, и жнец, и на дуде игрец
SELECT DISTINCT category FROM news
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
CREATE TABLE categories (
	id int auto_increment primary key,
  	name varchar(64)
);


<?php
function getRightCategories($db)
{
	$result = $db->query('SELECT id, name FROM categories');
	return $result->fetchAll(PDO::FETCH_KEY_PAIR);
}

$categories = getRightCategories($pdo);

print_r($categories);


Test PDO fetch online
Ответ написан
Комментировать
@KingstonKMS
Категории перенести в отдельную таблицу с уникальным id, а в новостях добавить связь.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Не могу разобраться, как получить список категорий из массива без дублей.

Получать нужно из базы нормальный список, без дублей. В вашем случае это будет запрос с дистинкт, как написал roswell, однако:
1) Запросы с дистинкт будут перебирать всю таблицу, что плохо и медленно
2) Если у вас категории пишутся в таблицу ньюс, значит у вас лажа со структурой бд. Категории должны лежать отдельной справочной таблицей, выборка из которой будет во первых в разы быстрее, а во вторых будет удовлетворять третьей нормальной форме (3NF).
3) Текущая структура не позволяет задать более 1 категории на новость.

Есть еще куча проблем с таким хранением, но это уже другой вопрос.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы