在MySQL中选择查询,检查字符串或在where子句中检查是否为true?

时间:2016-07-08 10:27:09

标签: mysql sql select mysql-workbench where

考虑下表:

<?php
// The file
$filename = 'test.jpg';
$source = imagecreatefromjpeg($filename);

// Set your height and width
$imgMaxWidth = 256;
$imgMaxHeight = 256;

// Content type
header('Content-Type: image/jpeg');

// Get new dimensions
list($imgWidth, $imgHeight) = getimagesize($filename);

// This is the code you post
$image = imagecreatetruecolor($imgMaxWidth, $imgMaxHeight);
imagecopyresampled($image, $source, 0, 0, 0, 0, $imgMaxWidth, $imgMaxHeight, $imgWidth, $imgHeight);

// Output
imagejpeg($image, null, 100);
?>

enter image description here

要求是获取填充了字符串** SELECT id, Bill_Freq, Paid_From, Paid_To, Paid_Dt, rev_code FROM psr_20160708091408; ** rev_code的行。 我还注意到,对于SUM填充为rev_code **的每一行,其SUM都不会为空或零。

所以我写了两个查询来获取id最低的行

根据where子句中的字符串检查进行查询:

Bill_Freq

基于真实条件的查询:

select
        min(id) as head_id,
        bill_freq,
        Paid_From,
        Paid_To,
        Paid_Dt
from
    `psr_20160708091408` where rev_code = "**SUM**";

我还没有看到有人使用第二种类型,想知道它的可靠性和失败的情况。

4 个答案:

答案 0 :(得分:1)

如果是&#34;第二种类型&#34;你的意思是一个没有明确条件的where子句,那么你有充分的理由不去看它。

SQL标准 - 以及大多数数据库 - 需要where not billing_freq <=> 0 中的显式条件。 MySQL允许你使用的速记,但它的确意味着:

where billing_freq <> 0 or billing_freq is null

或等效地:

<=>

min()是空安全比较运算符。

您的查询更重要的问题是select p.* from psr_20160708091408 p where rev_code = '**SUM**' order by id limit 1; 。我认为你真的想要这个:

var lineView : UIView = {
     let view = UIView()
     view.backgroundColor = UIColor.blackColor()
     view.translatesAutoresizingMaskIntoConstraints = false
     return view
}()


self.view.addSubview(lineView)
self.view.addConstraints(NSLayoutConstraint.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["view": lineView])))
self.view.addConstraints(NSLayoutConstraint.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-50-[view(1)]", options: NSLayoutFormatOptions(), metrics: nil, views: ["view": lineView])))

此外,您应该使用单引号作为字符串分隔符。这是ANSI标准,很少有任何理由使用双引号。

答案 1 :(得分:0)

实际上您可以使用第二种类型的查询,但由于您的要求基于 rev_code ,因此有条件 rev_code 总是好的,原因有2个

  1. 没有NUlls或Zeros的Bill_Freq可能是基于当前数据的假设
  2. 即使确实如此,将来您的应用程序逻辑可能会发生变化,并且可能会出现NULL或零的情况,这将在未来打破您的逻辑。
  3. 所以我的建议是首先使用 Rev_code

    进行查询

答案 2 :(得分:0)

请尝试使用以下查询

select
        id,
        bill_freq,
        Paid_From,
        Paid_To,
        Paid_Dt
from
    `psr_20160708091408` where  rev_code = "**SUM**" ORDER BY ASC LIMIT 0,1;

感谢。

答案 3 :(得分:0)

要求就是它本身。

  

要求是获取已填充rev_code的行   字符串'** SUM **'

在bill_freq IS NOT NULL且填充了rev_code的情况下 字符串'**SUM**'那么你的逻辑显然会失败。

转到

where rev_code = "**SUM**";