我如何在 Joomla 3 中对逗号分隔的字段进行 MySQL 查询?
How do I make a MySQL query on a comma-separated field in Joomla 3?
我试图在 Joomla 3 模块中进行 MySQL 查询,以查找 lexicon
列中包含特定 ID 值的行。所有字段都是逗号分隔的整数字符串,来自 Component Creator
中的多个 select 元素。我不习惯使用 Joomla,所以也许这就是为什么我 $results
在此代码中显示为空数组 []
的原因。
对我在这里做错了什么有什么建议吗?
/*
Example on table: tab__lexi
id | lexicon | dog | cat
____|_____________|_________|_________
1 | 1,2 | 3,8 | 4
2 | 5,6,9 | 3,2 | 1,3,4,5
*/
$lexiId=5;
$query = $db->getQuery(true);
$query->select($db->quoteName(array('dog', 'cat')));
$query->from($db->quoteName('#__lexi'));
$query->where($db->quote($lexiId) . ' IN ('. $db->quoteName('lexicon').')');
$db->setQuery($query);
$results = $db->loadObjectList();
$res=json_encode($results);
尝试将您的代码从
$query->where($db->quote($lexiId) . ' IN ('. $db->quoteName('lexicon').')');
到
$query->where( $db->quoteName('lexicon') . ' IN ('. $db->quote($lexiId).')');
所以它会生成这样的查询:
SELECT dog, cat FROM lexi WHERE lixicon IN (5);
但是,如果词典列中的数据存储在一行中,则不能使用 IN 运算符,但可以使用 LIKE(这会降低大型数据集的性能)
SQL 点赞例子
SELECT dog, cat FROM lexi WHERE lexicon LIKE "%YOUR_VALUE_HERE%";
我试图在 Joomla 3 模块中进行 MySQL 查询,以查找 lexicon
列中包含特定 ID 值的行。所有字段都是逗号分隔的整数字符串,来自 Component Creator
中的多个 select 元素。我不习惯使用 Joomla,所以也许这就是为什么我 $results
在此代码中显示为空数组 []
的原因。
对我在这里做错了什么有什么建议吗?
/*
Example on table: tab__lexi
id | lexicon | dog | cat
____|_____________|_________|_________
1 | 1,2 | 3,8 | 4
2 | 5,6,9 | 3,2 | 1,3,4,5
*/
$lexiId=5;
$query = $db->getQuery(true);
$query->select($db->quoteName(array('dog', 'cat')));
$query->from($db->quoteName('#__lexi'));
$query->where($db->quote($lexiId) . ' IN ('. $db->quoteName('lexicon').')');
$db->setQuery($query);
$results = $db->loadObjectList();
$res=json_encode($results);
尝试将您的代码从
$query->where($db->quote($lexiId) . ' IN ('. $db->quoteName('lexicon').')');
到
$query->where( $db->quoteName('lexicon') . ' IN ('. $db->quote($lexiId).')');
所以它会生成这样的查询:
SELECT dog, cat FROM lexi WHERE lixicon IN (5);
但是,如果词典列中的数据存储在一行中,则不能使用 IN 运算符,但可以使用 LIKE(这会降低大型数据集的性能)
SQL 点赞例子
SELECT dog, cat FROM lexi WHERE lexicon LIKE "%YOUR_VALUE_HERE%";