2015-05-04 64 views
0

我有一个产品UPC号码和供应商ID号码的数据库。多个供应商可能提供相同的产品,因此针对UPC的简单查询可以(并且经常)返回多行。但是,有一个供应商偏好列表(因为供应商以不同的价格销售相同的产品),我的目标是从最受欢迎的供应商处退货。简而言之,如果有五个供应商编号为1到5,那么首选供应商列表可能是$ vendors = array(5,3,1,2,4);.不同的用户有不同的偏好列表。因此,现在我正在创建首选供应商列表,循环查询最多五次(实际上是83次),并停止第一次查询返回一行。这很慢。是否有单个MySQL命令接受(排序)任意列值的列表,并使用“LIMIT 1”仅返回第一个找到的值?如何基于列条目的任意列表返回mysql行?

SELECT * FROM products WHERE upc='123456789123' AND vendor='5'; 
SELECT * FROM products WHERE upc='123456789123' AND vendor='3'; 

理论上变得像...

SELECT * FROM products WHERE upc='12345678123' AND vendor=('5', '3') LIMIT 1; 
+0

正是你以后有什么?你需要供应商5或供应商3的输出? – SMA

回答

1

试试这个

SELECT TOP 1 * FROM products WHERE upc='12345678123' AND vendor in ('5', '3') 
Order BY 
CASE WHEN Vendor = '5' THEN '1' 
WHEN Vendor = '3' THEN '2' 
ELSE Vendor END ASC 
0

尝试

SELECT * FROM products WHERE upc='12345678123' AND vendor in ('5', '3') LIMIT 1; 

请参阅SQL in操作,你可以直接通过供应商ID您的数组列表中了这一点。