我(新手)很难理解这个问题:
$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 :(得分:1)
关于select q.*
,它只是意味着获取表别名q
中的所有字段,恰好是表quotes
。它就像select *
,但仅适用于一个表格。
关于IF(v.id,1,0)
,这实际上是 MySQLism 。 IF
语句计算第一个参数中给出的表达式,如果是true
,则返回第二个参数。否则返回第三个参数。因此,您知道1
或0
将来自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)
:)