如何根据列条目的任意列表返回mysql行?

时间:2015-05-04 06:19:59

标签: mysql sorting

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

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;

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

请参阅sql中的in运算符,您可以直接将供应商ID的数组列表传递给它。