Не выбирайте значение из столбца, идентичное значению другого столбца в SQL - PullRequest
0 голосов
/ 14 января 2012

У меня есть две колонки из таблицы; fromid и toid , которые иногда содержат один и тот же идентификатор пользователя.

У меня также есть выпадающий список выбора, который выбирает все идентификаторы из обоих этих столбцов.

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

То, что я хотел бы, это выбрать только пользователя один раз и дать одному из столбцов приоритет или MAX (верно?), Если пользователь появляется в обоих столбцах. Вот код, который у меня есть:

$sql="
                            SELECT
                                DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname,
                                u.id 
                            FROM
                                (#__users AS u
                            INNER JOIN
                                #__uddeim AS um
                            ON
                                u.id=um.fromid)
                            WHERE
                                um.toid=".(int)$myself."
                            AND
                                um.totrash=0
                            AND
                                `um`.`delayed`=0".$filter."
                            UNION ALL
                            SELECT
                                DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname,
                                u.id
                            FROM
                                (#__users AS u
                            INNER JOIN
                                #__uddeim AS um
                            ON
                                u.id=um.toid)
                            WHERE
                                um.fromid=".(int)$myself."
                            AND
                                um.totrashoutbox=0".$filter."
                            AND um.systemflag=0";

ЧТО Я ПРОБОВАЛ -

Я пытался использовать запрос на подсчет, но это не сработало:

if (count ($row->displayname > 1))
    echo "duplicate rows";

1 Ответ

3 голосов
/ 14 января 2012

Попробуйте изменить UNION ALL в вашем запросе на UNION. Первый сохраняет все строки из обоих наборов данных; последний устраняет дубликаты - это сокращенная форма UNION DISTINCT.

...