0

I need to take logged users last 200 rows OrderId's from Orders table

WHERE UserName = '$user' 
  AND OrderState = '1' 
  AND OrderId = OrderDetails 

My tables here

Orders

OrderId int
UserName nvarchar(64)
OrderState int

OrderDetails

OrderId int
OrderDetailId int

My sample code:

$queryf = "SELECT TOP 200 * FROM Orders WHERE UserName='$user' AND OrderState='1' AND (SELECT * FROM OrderDetails WHERE OrderId='HERE PROBLEM') ORDER BY OrderId DESC";
$resultf = @mssql_query($queryf);
$sayif = @mssql_num_rows($resultf);

while($rowf = @mssql_fetch_array($resultf))
{
   $CustomerIds = $rowf["CustomerId"];
}

Another sample codes added from @vkp

    SELECT TOP 200 o.*
    FROM Orders o 
    JOIN OrderDetails d on o.OrderId = d.OrderId
    WHERE UserName='$user' 
      AND OrderState='1' 
    ORDER BY o.OrderId DESC

Throws an error

[FreeTDS][SQL Server]Ambiguous column name 'UserName'.

I'm trying but I don't know how to resolve it.

Thanks !

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
SwiftDeveloper
  • 7,244
  • 14
  • 56
  • 85

1 Answers1

1

If I understand your question correctly, this should be all you need:

Select  Distinct Top 200 O.*
From    Orders          O
Join    OrderDetails    D   On  O.OrderId = D.OrderId
Where   O.UserName = '$user'
And     O.OrderState = 1
Order By O.OrderId Desc

Another option is to use EXISTS:

Select  Top 200 O.*
From    Orders  O
Where   Exists
(
    Select  *
    From    OrderDetails    D
    Where   D.OrderId = O.OrderId
)
And     O.UserName = '$user'
And     O.OrderState = 1
Order By O.OrderId Desc
Siyual
  • 16,415
  • 8
  • 44
  • 58