SELECT ORDER BY FIELD,即使它不存在

时间:2012-07-24 16:58:49

标签: mysql

SELECT *
                    FROM  products2tecspecs as p2t, products_tecspecs as pt 
                    WHERE p2t.fk_product_id = '%s' AND pt.pts_id = fk_tecspec_id AND pt.pts_id 
                    IN (5275, 21, 5276, 5277, 5278,  49, 5279)
                    ORDER BY FIELD(pts_id, 5275, 21, 5276, 5277, 5278,  49, 5279)

我有这个选择,在那里我找到特定的ID并按我想要的顺序带来它。 但我对这种关系有疑问。我在foreach函数中使用它,我需要7个循环。问题不在于null,问题在于它只带来了关联产品。当然这不是一个问题,感谢上帝它发生了,但在我的情况下,如果只有2,它会破坏布局,例如。

有没有办法让我可以做类似的事情:如果找不到字段,请将其放置到位吗?

如果我创建关系,它可以工作,但我需要使用700个产品...

我找到了this,但它似乎不是一个NULL问题......

我也试过LEFT JOIN,但正如我所说,如果关系不存在,它就不能带来NULL ...

我被蒙蔽了


我发现了这个SELECT pts_name FROM ( SELECT pts_name, CASE pts_id WHEN 5275 THEN 1 WHEN 21 THEN 2 WHEN 5276 THEN 3 WHEN 5277 THEN 4 WHEN 5278 THEN 5 WHEN 49 THEN 6 WHEN 5279 THEN 7 END AS sort_order FROM products_tecspecs WHERE pts_id IN ( 5275, 21, 5276, 5277, 5278, 49, 5279 ) )a ORDER BY a.sort_order ASC。它带来了SELECT I WANT,但仍无法找到实现目标的方法......


加入
    SELECT * FROM products2tecspecs AS p2t LEFT JOIN products_tecspecs AS pt ON ( p2t.fk_tecspec_id = pt.pts_id ) WHERE p2t.fk_product_id =34 AND pt.pts_id IN ( 5275, 21, 5276, 5277, 5278, 49, 5279 ) OR p2t.p2t_value IS NULL ORDER BY FIELD( pts_id, 5275, 21, 5276, 5277, 5278, 49, 5279 ) LIMIT 40


但没有奏效。它带来的结果超出了所选的IN字段。

1 个答案:

答案 0 :(得分:0)

您可以在WHERE子句中添加其中一个选项(使用LEFT JOIN解决方案):

    OR pt.pts_id IS NULL
    OR fk_tecspec_id IS NULL