2013-11-04 166 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 :)