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
  • 704,970
  • 168
  • 1,303
  • 1,425
SwiftDeveloper
  • 7,002
  • 12
  • 52
  • 80

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
  • 15,882
  • 6
  • 40
  • 58