2009-10-05 13 views
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 
"; 

Ce concept similaire peut être fait dans MSSQL, mais quand je l'écris dans mysql, il montre une erreur. Aidez-moi.La requête interne Mysql ne fonctionne pas

+1

Pouvez-vous publier le schéma de la table? –

Répondre

1

Si vous insistez sur les sous-requêtes, vous pouvez le faire:

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 

Je vous suggère d'utiliser un LEFT JOIN à la place:

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 

Idéalement stocker aussi NULL au lieu de 0 dans defserverpaid/defserverfree et ajoutez des contraintes de clé étrangère.

+0

thnx, j'ai finalement trouvé qu'il y a une erreur dans ma syntaxe. –

Questions connexes