簡體   English   中英

MySQL查詢特殊字符?

[英]Mysql query with special characters?

我(新手)很難理解這個查詢:

$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;

關於select q.* ,僅表示從表別名q獲取所有字段,該別名恰好是表quotes 就像select *但僅用於一張桌子。

關於IF(v.id,1,0) ,這實際上是一種MySQLism IF語句計算第一個參數中給出的表達式,如果為true ,則返回第二個參數。 否則,它將返回第三個參數。 因此,您知道IF會出現10 您現在可能想知道如何評估v.id以返回邏輯值,其背后的原因是MySQL將布爾值視為TINYINT(1)對待,其中0被視為false ,非零值被視為true

因此可以將其改寫為IF(v.id != 0, 1, 0) ,這可能更易於閱讀。 鑒於v.id不能為null的事實,那么您可以用IF(v.id = 0, 0, 1)來重寫它。 無論如何,您可以更進一步,只需將其替換為v.id != 0 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM