2013-11-04 124 views
0

我(新手)都很难明白这个查询:具有特殊字符的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; 
+0

MySQL文档可能对您有所帮助 - 阅读表格/列别名... – PinnyM

回答

1

关于select q.*,它只是意味着从表的别名q,这恰好是表quotes让所有领域。这就像select *,但只是一张桌子。

关于IF(v.id,1,0),那真是MySQLismIF语句评估第一个参数中给出的表达式,如果它是true,则返回第二个参数。否则它返回第三个参数。所以你知道10会从IF中出来。您现在可能想知道如何评估v.id以返回逻辑值,其背后的原因是MySQL将布尔值视为TINYINT(1),其中0被认为是false,而非零值被认为是true

因此,这将被改写成IF(v.id != 0, 1, 0)这可能更容易阅读。鉴于v.id不能为空,那么你可以用这种方式重写IF(v.id = 0, 0, 1)。无论如何,你可以更进一步,只需将其替换为v.id != 0 :)