Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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&;下显示产品;MySQL_Php_Mysql - Fatal编程技术网

在产品标题PHP&;下显示产品;MySQL

在产品标题PHP&;下显示产品;MySQL,php,mysql,Php,Mysql,我有两张桌子;子级和子级1。sublevel包含产品标题或集合组名称,另一个subcat1包含所有实际产品 这是次级表 类别ID子级别名称 67 1个麻醉温度计 67 2个前额温度计 67 3个药物测试温度计 67 4药物测试温度计 这是另一张表,SUBAT1 类别ID子级别ID子级别名称 67 2 12级温度计 67 1临床试验结果 67 2前额温度计 67 3英国人 67 3英国事件 我想要的是输出,当我指的是输出时,我在php代码中的意思是这样的 麻醉温度计-Clinitrend 前

我有两张桌子;子级和子级1。sublevel包含产品标题或集合组名称,另一个subcat1包含所有实际产品

这是次级表


类别ID子级别名称
67 1个麻醉温度计
67 2个前额温度计
67 3个药物测试温度计
67 4药物测试温度计

这是另一张表,SUBAT1

类别ID子级别ID子级别名称
67 2 12级温度计
67 1临床试验结果
67 2前额温度计
67 3英国人
67 3英国事件

我想要的是输出,当我指的是输出时,我在php代码中的意思是这样的

麻醉温度计-Clinitrend

前额温度计-6个一次性事件,6个可重复使用事件,12个事件

药物测试温度计-Briteline,BriteEvent

我经常遇到的问题是,我总是对每个产品重复相同的标题,但我只想要一次。我尝试过分组方式、区分方式和左联接方式,但检索到的每个产品都会显示其类别标题-我知道我可能是以错误的方式查看查询…每次我想到一些新的内容,可以更改查询时,我都失败了

换个角度看,但我的大脑不是那样工作的

function catLevelsName(){

// This would be used to select which category $cat_id = $_GET['cat_id'];

global $dbc;

$query = "SELECT subcat1.SubCatName FROM subcat1 RIGHT JOIN sublevel ON sublevel.CategoryID = subcat1.CategoryID";  
$result = mysqli_query($dbc, $query) or die(mysqli_error(). "<p>with query;<br />$query");

while($row = mysqli_fetch_array($result)){

echo $row['Name'];
echo $row['SubCatName'];
}
函数catLevelsName(){
//这将用于选择哪个类别$cat_id=$\u GET['cat_id'];
全球$dbc;
$query=“在subvel.CategoryID=subcat1.CategoryID上从subcat1右联接子级中选择subcat1.SubCatName”;
$result=mysqli_query($dbc,$query)或die(mysqli_error()。“with query;
$query”); while($row=mysqli\u fetch\u数组($result)){ echo$row['Name']; echo$row['SubCatName']; }
有没有关于我做错了什么的线索


另外,对于我的格式设置,我深表歉意。

我不确定这是否是您想要的,但我建议您提出以下问题:

select sl.Name, sc.SubCatName from sublevel sl 
  join subcat1 sc 
    on sc.CategoryID=sl.CategoryID
    and sc.SublevelID=sl.SublevelID
  order by sl.Name;
这为我提供了示例数据的输出,如下所示:

'Anaesthsia Thermometers', 'Clinitrend'
'Drug Testing Thermometers', 'BriteEvent'
'Drug Testing Thermometers', 'Briteline'
'Forehead Thermometers', 'Forehead Thermometer'
'Forehead Thermometers', '12 Level Thermometer'
一旦您按照自己的喜好设计了查询,只需使用PHP代码读取数据并以您想要的格式打印即可。

简短编辑,回答您的问题:您不能将子级别标签作为sql查询结果,只需一次,因为它将出现在每个sql连接结果行中。我建议您不要这样做o深入了解连接理论以及sql本身如何提供输出行

我对你的设想有两个很大的怀疑:

  • 我会对表使用更详细的名称
  • 我非常怀疑您的数据库结构。subcat不是嵌套在sublevel中的一对多关系吗?在这种情况下,subcat表中不应该有类别id,sublevel id应该是sublevel表中的PK
  • 无论如何,我假设您绑定到这个结构,所以我克隆了它(没有使用键/外键,因为我对您的设计不是很清楚)

    用于输出显示的PHP代码

    <?php
    // Weird database init
    $connection = mysql_connect('localhost', 'root', 'my awesome root password');
    mysql_select_db('stack', $connection);
    $result = mysql_query("select * from SubLevel s inner join SubCat c on s.SublevelID=c.SublevelID", $connection);
    // Output array
    $subLevels = array();
    // Build our output array
    while ($row = mysql_fetch_assoc($result)) {
      $subLevelId = $row['SublevelID'];
      $subLevels[$subLevelId]['subLevelToDisplay'] = $row['Name'];
      $subLevels[$subLevelId]['subCats'][] = "<a href='{$row['SubCatName']}'>{$row['Url']}</a>";
    }
    // Format output
    foreach ($subLevels as $id => $row) {
      print "{$row['subLevelToDisplay']} - " . implode(',', $row['subCats']) . "<br />";
    }
    
    希望这真的能帮助你们,无论如何,我会重新考虑数据库层在一个更清晰和更清晰的
    结构化方式。

    您可以尝试一种肮脏的解决方案…:)

    使用Emo Mosley的回复…您可以使用数组

    例如:

    $array_results = array();
    $query = "select sl.Name, sc.SubCatName from sublevel sl 
      join subcat1 sc 
        on sc.CategoryID=sl.CategoryID
        and sc.SublevelID=sl.SublevelID
      order by sl.Name;"
    $result = mysqli_query($dbc, $query) or die(mysqli_error(). "<p>with query;<br />$query");
    
    while($row = mysqli_fetch_array($result)){
        $array_results[$row['Name']][] = $row['SubCatName'];
    }
    

    虽然我没有测试过,但我认为它应该起作用:

    HiBasoRF,感谢你在“数据库”的结构中工作。在你的帮助下,页面看起来像我想要的那样。我还认为它是PHP代码来帮助显示我想要的,但是我的技术水平仍然是基础时期。我想问一件事。内爆,现在我有了每个产品,我可以使用另一个内爆或“For each loop”为每个产品提供唯一的链接(我将从数据库收集数据以构建url)?感谢谢伊·阿佐帕迪,链接不起作用。请提供一个正确的链接,否则我无法理解你的观点:)很抱歉@brazorf,这是正确的链接。这是一个静态图像,我希望这能帮助你理解我的问题。我编辑了sql和php代码来添加产品链接。这就是你要找的吗?嗨@brazorf,谢谢你的持续帮助n这..我还没有尝试过你的编码。我可能有复杂的事情,因为你以前的代码工作得很好。我遇到的问题是用锚标记包装产品。当我指的是从数据库获取url时,我指的是类似于此产品的东西。php?category=forum&subvel=1(这只是一个示例)我可以构建链接没有问题,它只是处理内爆函数,因为我无法在每个函数周围放置锚定标记…现在它更像是一个PHP问题,而不是MySQL现在..嗨Klian,为什么这是一个肮脏的解决方案?编码是冗长的吗?这会产生结果,所以我正朝着正确的方向前进。就像我在回复@brazo时提到的那样rf.introde显示产品,但它们需要是指向其产品页面的链接,但我对该编辑的处理很差。要使这些链接成为链接,我需要通过一个“for each循环”,如;[code]$links=array();foreach($arr as$value){$links[]=“”;}$links\u str=introde(,,$links);echo$links\u str;[/code]嗨@Emo Mosley..当我试图弄明白它时,这个查询与我使用的类似。老实说,我抛出了许多类似的版本。但我认为这是我真正需要的PHP代码来显示我想要的,但我只是不知道要写什么才能达到目的。@D_Azzopardi,我很困惑-你在寻找PHP代码来构建像你这样的网页吗U
    Forehead Thermometers - 12 Level Thermometer,Forehead Thermometer
    Anaesthsia Thermometers - Clinitrend
    Drug Testing Thermometers - Briteline,BriteEvent
    
    $array_results = array();
    $query = "select sl.Name, sc.SubCatName from sublevel sl 
      join subcat1 sc 
        on sc.CategoryID=sl.CategoryID
        and sc.SublevelID=sl.SublevelID
      order by sl.Name;"
    $result = mysqli_query($dbc, $query) or die(mysqli_error(). "<p>with query;<br />$query");
    
    while($row = mysqli_fetch_array($result)){
        $array_results[$row['Name']][] = $row['SubCatName'];
    }
    
    foreach ($array_results as $key => $value) {
        if(is_array($value)){
            echo $key.": ".implode(", ", $value);
        }
    }