0

私はこのテーブルを持っています

UMS

id_attribute    value   order
1                MB      1
1                Gb      2
1                TB      3
...

そしてこのテーブル

ATTRIBUTE_VALUE
id    id_attribute          value  name     ums
 1         1                 50     hdd     GB
 2         1                 100    hdd     TB
 3         2                 15.00  price   NULL

id_attribute=1 の ATTRIBUTE_VALUE から選択し、存在する場合 (UMS.value=ATTRIBUTE_VALUE.ums) から UMS.order end で並べ替え ATTRIBUTE_VALUE.value でグループ化する場合

出力の例:

50 GB
100 Tb

   and must to appear 
    15.00   !!! here is the problem because in my UMS table i don't have UMS for price

    but it doesn't appear
4

3 に答える 3

6

質問を明確にした後に更新します-次のようなことを試してください:

SELECT T1.*
FROM ATTRIBUTE_VALUE T1
LEFT JOIN UMS T2
ON T1.id_attribute = T2.id_attribute AND T1.ums = T2.value
ORDER BY T2.order, T1.value

ただし、T1.value が 1000 より大きい場合、これは失敗することに注意してください。注文する前に、すべてのユニットを同じタイプに変換することをお勧めします。

クエリの結果:

id  id_attribute  value  name    ums
3   2             15.00  price     
1   1             50     hdd     GB
2   1             100    hdd     TB
于 2010-05-11T12:20:20.107 に答える
0

Finlay 私は自分の答えを得ました:

これはコードです:

$nr_ordine=0;
$virgula="";
$ordine="valoare";
$ordine2="FIELD(unitate_masura,";
$sql_ums=mysql_query("select * from atribute_masura where id_atribut='".$exe_atribut['id']."' order by ordine asc");
while($exe_ums=mysql_fetch_array($sql_ums))
{
$nr_ordine++;
if($nr_ordine>1)
{
$virgula=",";
};


$ordine2.=$virgula."'".$exe_ums['valoare']."'";
};
$ordine2.=")";
if($ordine2!="FIELD(unitate_masura,)")
{
$ordine=$ordine2;
};


$s_q0=mysql_query("select * from atribute_cautare where id_atribut='".$exe_atribut['id']."' group by valoare order by $ordine asc") or die (mysql_error());        
while($s_q=mysql_fetch_array($s_q0))
{

...
};

名前は私の質問と一致しませんが、これはFIELD (ums,'kb','mb','gb','tb') によるアイデア順です

于 2010-05-11T19:06:09.697 に答える
0

次のように、mysql で条件付き順序を作成できます。

user 
id    name

select *
from user 
order by (case when id <5 then id else name end) 

ただし、テーブルが 2 つあり、それらを結合する必要があります。この方法で必要なものを取得できるかどうかはまだわかりません。また、ある支店では DESC で、別の支店では ASC で注文することはできません。

于 2010-05-11T12:53:11.313 に答える