从MySQL表中获取数据时,我很震惊。我正在使用条件WHERE子句来过滤掉结果。我有两个表的模式是:
CREATE TABLE IF NOT EXISTS `images` (
`image_id` int(11) unsigned NOT NULL,
`keyword_id` int(11) unsigned NOT NULL,
`url` varchar(2083) NOT NULL,
`size` varchar(50) NOT NULL,
`color` varchar(50) NOT NULL,
`type` varchar(50) NOT NULL,
`created_at` datetime NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=901 DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `keywords` (
`id` int(11) unsigned NOT NULL,
`description` varchar(100) NOT NULL,
`created_at` datetime NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;
我保存了一些关键字和图片链接。为了规范化数据,我已将图像链接保存在单独的图像中。表格' keyword_id'是对应于'描述'的外键。关键字表中的(即关键字)字段。使用以下SQL语法,我尝试指定选择条件 通过关键词拉出图像链接,例如"胆固醇水平。"现在,当选择标准失败时,脚本必须输出一些错误,这些错误不会发生 我写的if条件语句,我无法弄清楚为什么?这是我的第一个担忧。
其次,我想通过不是精确的关键字匹配来获取图像。例如,如果我的关键字表包含keyword "Cholesterol levels,"
我的
脚本可以通过该关键字成功获取图像;但是,当我仅通过"Cholesterol" and/or "levels".
搜索时,无法执行我知道Mysql的喜欢
运营商,但我不确定它是否可以在这里应用。
$dbdriver = "mysqli";
$conn = ADONewConnection($dbdriver);
$conn->Connect($server, $user, $password, $database);
$description = "cholesterol levels";
$brecordSet = $conn->Execute('
SELECT * FROM keywords
INNER JOIN images
WHERE description = ? AND keywords.id = images.keyword_id
ORDER BY RAND()
LIMIT 1
', $description);
if (!$brecordSet)
{
print $conn->ErrorMsg();
// Optionally
print "Echo on failure";
}
else
{
$url = $brecordSet->fields['url'];
}
echo $url;
答案 0 :(得分:1)
$description = "cholesterol levels";
$brecordSet = $conn->Execute("SELECT * FROM keywords INNER JOIN images WHERE description LIKE '%".$description."%' AND keywords.id = images.keyword_id ORDER BY keywords.description ASC");
使用上述查询,您将获得存储在$ brecordset变量中的数组格式的记录。然后使用foreach循环,你可以遍历每个记录并访问它。希望这可以帮助你..
答案 1 :(得分:0)
对不起,我无法纪念..
中有问题这一行:
`url` varchar(2083) NOT NULL,
varchar的限制是250个字节。 您可以将类型更改为:
`url` text(2083) NOT NULL,
答案 2 :(得分:0)
使用预备陈述。
$description = "%cholesterol levels%";
$brecordSet = $conn->Execute("
SELECT * FROM keywords
INNER JOIN images
WHERE description LIKE :description
AND keywords.id = images.keyword_id
ORDER BY keywords.description ASC
", array('description' => $description));