用特殊字符查询mysql?

时间:2013-11-04 14:57:01

标签: mysql

我(新手)很难理解这个问题:

$result = mysql_query("
SELECT q.*, IF(v.id,1,0) AS voted
FROM quotes AS q
LEFT JOIN quotes_votes AS v 
ON  q.id = v.qid
    AND v.ip =".$ip."
    AND v.date_submit = '".$today."'
");  

任何人都可以使用if语句和v.id,1,0提供有关这些短符号(例如'q。*')的更多信息。有任何消息来源可以阅读更多相关内容吗?

非常感谢。

这是表格的样子:

CREATE TABLE `quotes` (
      `id` smallint(5) unsigned NOT NULL auto_increment,
      `txt` varchar(255) collate utf8_unicode_ci NOT NULL default '',
      `author` varchar(32) collate utf8_unicode_ci NOT NULL default '',
      `bgc` varchar(32) collate utf8_unicode_ci NOT NULL default '',
      `votes` mediumint(9) unsigned NOT NULL default '0',
      `vsum` int(11) unsigned NOT NULL default '0',
      `rating` double NOT NULL default '0',
      PRIMARY KEY  (`id`),
      KEY `rating` (`rating`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16 ;

CREATE TABLE `quotes_votes` (
  `id` mediumint(9) unsigned NOT NULL auto_increment,
  `qid` smallint(6) unsigned NOT NULL default '0',
  `ip` int(10) NOT NULL default '0',
  `vote` tinyint(1) NOT NULL default '0',
  `date_submit` date NOT NULL default '0000-00-00',
  `dt_submit` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `qid` (`qid`,`ip`,`date_submit`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

1 个答案:

答案 0 :(得分:1)

关于select q.*,它只是意味着获取表别名q中的所有字段,恰好是表quotes。它就像select *,但仅适用于一个表格。

关于IF(v.id,1,0),这实际上是 MySQLism IF语句计算第一个参数中给出的表达式,如果是true,则返回第二个参数。否则返回第三个参数。因此,您知道10将来自IF。您现在可能想知道如何评估v.id以返回逻辑值,其背后的原因是MySQL将布尔值视为TINYINT(1),其中0被视为{{} 1}}和非零值被视为false

因此,这将被重新描述为true,这可能更容易阅读。鉴于IF(v.id != 0, 1, 0)不能为null的事实,您可以这样重写v.id。无论如何,您可以更进一步,只需将其替换为IF(v.id = 0, 0, 1):)