Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php foreachloop中的foreachloop MySQL_Php_Mysql - Fatal编程技术网

Php foreachloop中的foreachloop MySQL

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

我会尽量详细解释

数据库中有以下制造商: 苹果、佳能、宏达电、惠普、棕榈和索尼

这是现有的PHP代码:

$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”开头的两个制造商。对不起,你到底想做什么?