2010-10-24 68 views
0

我有一個複雜的查詢,我一直在摔跤2天,似乎無法讓它運行。我有兩個querys - 第一個查詢工作正常,但我不知道第二個 我在做什麼錯了?MySQL查詢匹配數組中的所有內容

CREATE TABLE `recipes` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `name` varchar(100) NOT NULL default '', 
    `cat` int(5) NOT NULL default '0', 
    `instructions` text NOT NULL, 
    `submitted_by` varchar(100) NOT NULL default '', 
    `addDate` date NOT NULL default '0000-00-00', 
    `hits` int(7) NOT NULL default '0', 
    `metaDesc` text NOT NULL, 
    `metaKeys` text NOT NULL, 
    `enComments` enum('yes','no') NOT NULL default 'yes', 
    `enRating` enum('yes','no') NOT NULL default 'yes', 
    `enRecipe` enum('yes','no') NOT NULL default 'yes', 
    `isApproved` enum('yes','no') NOT NULL default 'no', 
    `comCount` int(7) NOT NULL default '0', 
    `ratingCount` int(8) NOT NULL default '0', 
    `ipAddresses` text NOT NULL, 
    `email` varchar(250) NOT NULL default '', 
    `rss_date` varchar(35) NOT NULL default '', 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `name` (`name`,`instructions`,`metaDesc`,`metaKeys`), 
    FULLTEXT KEY `submitted_by` (`submitted_by`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=37 ; 

CREATE TABLE `ingredients` (
    `id` int(10) NOT NULL auto_increment, 
    `recipe` int(8) NOT NULL, 
    `qty` varchar(128) NOT NULL, 
    `measurement` varchar(128) NOT NULL, 
    `ingredient` varchar(128) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `ingredient` (`ingredient`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=135 ; 

我已經創建了一個搜索詞匹配的成分表中的任何成分,並導致整個配方的查詢。

$q_recipe = mysql_query("SELECT * FROM recipes 
    WHERE enRecipe = 'yes' 
    AND isApproved = 'no' 
    AND MATCH(name,instructions,submitted_by,metaDesc,metaKeys) AGAINST('".$search."') IN BOOLEAN MODE) 
    OR id IN (SELECT distinct recipe FROM ingredients WHERE ingredient LIKE '%".$search."%') 
      ORDER BY name LIMIT $limit") or die(mysql_error()); 

的目標是改寫上面的查詢來提供搜索詞匹配的數組只包括該陣列中的所有條款食譜新的搜索功能。幫幫我!!!

回答

0

你的'反對'中的額外括號。將AGAINST('".$search."') IN BOOLEAN MODE)更改爲AGAINST('".$search."' IN BOOLEAN MODE)

我也會小心讓這兩個表使用不同的字符集。

1

找到了一個解決方案,雖然它可能不是最有效的。

foreach ($search as $item) { 
    $sql .= "AND id IN (SELECT recipe FROM ingredients WHERE ingredient like '%".$item."%') "; 
} 
$q_sql = "SELECT * FROM recipes 
      WHERE enRecipe = 'yes' 
      AND isApproved = 'no' 
      ".$sql;