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 排序,如果按 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

您可以在 mysql 中进行条件排序,例如:

user 
id    name

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

但是,您有两张桌子,您需要加入它们,我仍然不确定您是否可以通过这种方式获得所需的东西。此外,您不能在一个分支上使用 DESC 并在另一个分支上使用 ASC 进行订购。

于 2010-05-11T12:53:11.313 回答
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 回答