SQL SELECT不喜欢

时间:2017-02-23 14:02:58

标签: mysql sql

我有一个数组:

$codes = array (97121, 97122, 97123, 97180);

真正的数组要长得多,它包含近130个代码,所以我认为它不一定是一个循环。

我有一个mySQL表,其中有一列 VilleAnn (带有邮政编码的城市)ex:

  • Sainte-Anne 97180
  • Sanary-sur-Mer 83110

使用mysqli我必须选择 VilleAnn 不包含数组 $codes 中的任何邮政编码。

如果 VilleAnn 是一个简单的邮政编码我会说:

SELECT * FROM table WHERE VilleAnn NOT IN(97121, 97122, 97123, 97180)

但在这种情况下,必须使用NOT LIKE "%..."

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

你可以REGEXP:

SELECT * FROM table WHERE VilleAnn NOT REGEXP '97121|97122|97123|97180|....'

答案 1 :(得分:2)

这样的事情:

SELECT * 
FROM `table` 
WHERE (
    `VilleAnn` NOT LIKE '%97121%' AND 
    `VilleAnn` NOT LIKE '%97122%' AND 
    `VilleAnn` NOT LIKE '%97123%' AND 
    `VilleAnn` NOT LIKE '%97180%'
)

答案 2 :(得分:2)

条件不适用于通配符。您最好的选择是尝试从原始字段中提取邮政编码,在此示例中

 plugins: {
    ptype: 'cellediting',
    clicksToEdit: 1,
    listeners: {
        validateedit: function( editor, context, eOpts ){
            var store = context.column.getEditor().store,
                record = context.record;
           if(store.find('id',context.value) === -1){
             context.cancel = true;
           }
        }
    }
}

我认为现实生活更复杂,所以可能需要调整以反映该领域的实际格式。

答案 3 :(得分:1)

SELECT * FROM table WHERE VilleAnn NOT REGEXP '[0-9]';

这会对你有帮助。

要检查四次出现,您可以使用:

SELECT * FROM table WHERE VilleAnn NOT REGEXP '[0-9]{4}';