tags:

views:

239

answers:

3

I have this table

UMS

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

and this table

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

and i want to select from ATTRIBUTE_VALUE where id_attribute=1 and if exist (UMS.value=ATTRIBUTE_VALUE.ums) then order by UMS.order end if group by ATTRIBUTE_VALUE.value

example for output :

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
+6  A: 

Update after you clarified your question - Try something like this:

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

But note that this will fail if T1.value is greater than 1000. It might be better to convert all units to the same type before ordering them.

Result of query:

id  id_attribute  value  name    ums
3   2             15.00  price     
1   1             50     hdd     GB
2   1             100    hdd     TB
Mark Byers
But how can I do something like this?
cosy
The problem is, in this table named attribute_value I will have attribute that will did not appear in UMS table. And in this case my selection stoped
cosy
Thanks! I resolve my problem, on my own. Anyway you got the best answer!
cosy
And for your curiosity this is the website link, in the right i have the filter http://www.demo.ewstudio.ro/agatatori/compact-mirror sorry but it is not in english
cosy
A: 

You can make a conditional order by in mysql, like this, for example:

user 
id    name

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

However, you've got two tables, you need yo join them, I'm still not sure if you can get what you need this way. Also, you can't order with DESC on one branch and ASC on another.

ceteras
A: 

Finlay I have get my own answer:

this is the code:

$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))
{

...
};

The names not correspond with my question but this is the idea order by FIELD (ums,'kb','mb','gb','tb')

cosy