Php foreachloop中的foreachloop MySQL
我会尽量详细解释 数据库中有以下制造商: 苹果、佳能、宏达电、惠普、棕榈和索尼 这是现有的PHP代码:Php foreachloop中的foreachloop MySQL,php,mysql,Php,Mysql,我会尽量详细解释 数据库中有以下制造商: 苹果、佳能、宏达电、惠普、棕榈和索尼 这是现有的PHP代码: $query = $db->result_cache(" SELECT DISTINCT(SUBSTRING(manufacturers_name,1,1)) AS firstletter FROM " . TABLE_MANUFACTURERS . " ORDER BY firstletter "); $module_index = array(); $modu
$query = $db->result_cache("
SELECT DISTINCT(SUBSTRING(manufacturers_name,1,1)) AS firstletter
FROM " . TABLE_MANUFACTURERS . "
ORDER BY firstletter
");
$module_index = array();
$module_content = array();
foreach ($query['RESULT'] as $result) {
$module_index[] = array(
'MANU_INDEX' => $result['firstletter'],
);
$query = $db->result_cache("
SELECT manufacturers_name,
manufacturers_id
FROM " . TABLE_MANUFACTURERS . "
WHERE manufacturers_name LIKE '" . $result['firstletter'] ."%'
ORDER BY manufacturers_name
");
foreach ($query['RESULT'] as $result) {
if (SEARCH_ENGINE_FRIENDLY_URLS == 'true') {
$SEF_parameter = '&name=' . inc_cleanName($result['manufacturers_name']);
}
$module_content[] = array(
'MANU_NAME' => $result['manufacturers_name'],
'MANU_LINK' => inc_url(FILENAME_DEFAULT, 'manufacturers_id=' . $result['manufacturers_id'] . $SEF_parameter),
);
}
}
在第一个mysql查询中,我获取第一个字母时使用了distinct,以避免出现双重结果(例如HTC和Hewlett的“H”)
这是我得到的数组
Array(
[0] => Array([MANU_INDEX] => A)
[1] => Array([MANU_INDEX] => C)
[2] => Array([MANU_INDEX] => H)
[3] => Array([MANU_INDEX] => P)
[4] => Array([MANU_INDEX] => S)
)
这是正确的
通过secound mysql查询,我尝试获取所有制造商的首字母(例如,苹果的“A”)。但在调试$module_内容数组时,我总是得到所有制造商的支持
Array(
[0] => Array(
[MANU_NAME] => Apple
[MANU_LINK] => manufacturers_id=1)
[1] => Array(
[MANU_NAME] => Canon
[MANU_LINK] => manufacturers_id=2)
[2] => Array(
[MANU_NAME] => Hewlett-Packard
[MANU_LINK] => manufacturers_id=4)
[3] => Array(
[MANU_NAME] => HTC
[MANU_LINK] => manufacturers_id=3)
[4] => Array(
[MANU_NAME] => Palm
[MANU_LINK] => manufacturers_id=5)
[5] => Array(
[MANU_NAME] => Sony
[MANU_LINK] => manufacturers_id=6)
)
我不理解这个问题,因为第二个mysql查询中的WHERE子句表示以第一个字母开头获取所有制造商。您能不能只使用
groupbysubstring(manufacturers\u name,1,1)
?如果我有两个制造商的字母为“H”(比如:HTC,Hewlett)它只显示其中一个。所以它不适用于单个查询如果你想让所有制造商都知道第一个字母过滤器的作用是什么,只需选择所有制造商(无where子句)。您可以使用php或其他选择字段获取第一个字母。我尝试了这个方法,效果很好。但现在我必须在我的制造商指数中乘以字母“H”,因为他们是以“H”开头的两个制造商。对不起,你到底想做什么?