0

私(初心者)はこのクエリを理解するのに苦労しています:

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

1 に答える 1

1

に関してselect q.*は、テーブル エイリアスからすべてのフィールドを取得することを意味します。qこれはたまたま tablequotesです。それは似select *ていますが、1つのテーブルだけです。

に関してIF(v.id,1,0)は、それは本当にMySQLismです。このIFステートメントは、最初の引数で指定された式を評価し、それが である場合true、2 番目の引数を返します。それ以外の場合は、3 番目の引数を返します。1したがって、 aまたは a0が から出てくることがわかりますIF。を評価して論理値を返すにはどうすればよいのか疑問に思われるかもしれませんv.id。その背後にある理由は、MySQL がブール値をあたかも とTINYINT(1)見なされ、ゼロ以外の値が と見なさ0れるかのように扱うためです。falsetrue

IF(v.id != 0, 1, 0)そのため、読みやすいように言い換えることができます。v.idnull にできないという事実を考えると、このように書き換えることができますIF(v.id = 0, 0, 1)。とにかく、さらに一歩進んで、次のように置き換えることができますv.id != 0:)

于 2013-11-04T15:20:29.583 に答える