Mysql внутренний запрос не работает

0
    $sql= "select 
            tblservergroup.id,
            tblservergroup.groupname,

            if(tblservergroup.defserverpaid='0', '0', select concat(tblservers.ipaddress, ' (', tblservers.name, ')' ) as defaultserverpaiddesc from tblservers where tblservers.id=tblservergroup.defserverpaid),
            if(tblservergroup.defserverfree='0', '0', select concat(tblservers.ipaddress, ' (', tblservers.name, ')' ) as defaultserverfreedesc from tblservers where tblservers.id=tblservergroup.defserverfree),      

            tblservergroup.note
            from tblservergroup
";

Эта аналогичная концепция может быть выполнена в MSSQL, но когда я пишу ее в mysql, она показывает ошибку. Справка.

  • 1
    Вы можете опубликовать схему таблицы?
Теги:

1 ответ

1
Лучший ответ

Если вы настаиваете на подзапросах, вы можете сделать это:

SELECT
    tblservergroup.id,
    tblservergroup.groupname,
    tblservergroup.note,
    IF(defserverpaid='0', '0', (SELECT concat(ipaddress, ' (', name, ')') FROM tblservers WHERE id=defserverpaid)) AS defaultserverpaiddesc,
    IF(defserverfree='0', '0', (SELECT concat(ipaddress, ' (', name, ')') FROM tblservers WHERE id=defserverfree)) AS defaultserverfreedesc
FROM
    tblservergroup

Я бы предложил вместо LEFT JOIN использовать LEFT JOIN:

SELECT
    tblservergroup.id,
    tblservergroup.groupname,
    tblservergroup.note,
    IF(defserverpaid='0', '0', concat(ts1.ipaddress, ' (', ts1.name, ')')) as defaultserverpaiddesc
    IF(defserverfree='0', '0', concat(ts2.ipaddress, ' (', ts2.name, ')')) as defaultserverfreedesc
FROM
    tblservergroup
    LEFT JOIN tblservers ts1 ON ts1.id=defserverpaid
    LEFT JOIN tblservers ts2 ON ts2.id=defserverfree

В идеале также сохраняйте NULL вместо 0 в defserverpaid/defserverfree и добавляйте ограничения внешнего ключа.

  • 0
    спасибо, я наконец-то обнаружил, что в моем синтаксисе есть какая-то ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню