1

我无法让我的 sql 查询结果在 while 循环之外完全工作。

我有一个这样的查询:

$result_artikel = mysql_query("SELECT DISTINCT oxtitle, FROM oxarticles a
INNER JOIN oxobject2category b ON a.oxid = b.oxobjectid
WHERE b.oxcatnid IN (SELECT oxcatnid FROM oxobject2category WHERE oxobjectid = '$term')ORDER BY oxtitle ASC")
or die(mysql_error());  ;

这会返回一些名称(oxtitle)。例如 5:

汽车,智能手机,椅子,桌子,饮料

在下一步中,我将此查询结果放入一个数组中并在 while 循环中输出它们

$Daten_artikel = array(
    'name' => '',
    'oxsort' => '',
    'bild' => ''
);

while($row = mysql_fetch_array($result_artikel))
{
    $Daten_artikel['name'] = $row['oxtitle'];
    $Daten_artikel['oxsort'] = $row['oxsort'];
    $Daten_artikel['bild'] = $row['oxpic1'];

    echo '<br>' . "Name: ".$Daten_artikel['name'];
}

我将结果放在数组中的原因是我可以将它们输出到 while 循环之外。到目前为止,这有效,但是当我在 while 循环之外输出结果时,我在数组中只有一个名称(oxtitle)。这是我无法解决的问题。

我需要 while 循环之外的结果,因为我稍后在页面中有一个 html 表,该表必须由 IF 语句填充。

示例:

<table>
<tr>
<td>
<?php
if ($Daten_artikel['name'] == smartphone )
    {
    echo $Daten_artikel['name'];
    }
?>
</td>
</tr>

<tr>
<td>
<?php
if ($Daten_artikel['name'] == chair)
    {
    echo $Daten_artikel['name'];
    }
?>
</td>
<tr>
</table>

这只是一个例子。但这不起作用,因为数组中只有一个名称(oxtitle),例如“car”。所以 if 语句不能工作。它只适用于:如果数组 == 汽车。

一种解决方案是将我的所有表格 html 代码与 if 循环放在 while 循环中。但这意味着我必须始终使用 echo '' 等在 wile 循环内工作。这不是很好。我希望有另一个灵魂可以让我以“我的”方式工作。意味着即使在 while 循环之外,该数组也包含所有名称(oxtitles),因此我可以使用 if 语句。

对不起,我的英语不好。问候。

4

1 回答 1

1

你为什么不使用这个

   $row = mysql_fetch_array($result_artikel) ;

  $Daten_artikel['name'] = $row['oxtitle'];
  $Daten_artikel['oxsort'] = $row['oxsort'];
  $Daten_artikel['bild'] = $row['oxpic1'];

 // echo '<br>' . "Name: ".$Daten_artikel['name'];

而不是while循环。然后你可以使用这些变量。

编辑:

 <?php
   echo "<table>";
   while($row = mysql_fetch_array($result_artikel))
{
$Daten_artikel['name'] = $row['oxtitle'];
$Daten_artikel['oxsort'] = $row['oxsort'];
$Daten_artikel['bild'] = $row['oxpic1'];

//echo '<br>' . "Name: ".$Daten_artikel['name'];
?>
<tr>
<td>
<?php
if ($Daten_artikel['name'] == "smartphone" )
{
echo $Daten_artikel['name'];
}
if ($Daten_artikel['name'] == "chair")
{
echo $Daten_artikel['name'];
}
else {echo "there is nothing";} 
?>
</td>
</tr>

<?php
}
echo "</table>";
?>

编辑2; 我不确定我是否理解你,但是这个解决方案,

将您的订单更改为:

   ORDER BY case when oxtitle = 'Schwarz' then 1
                 when oxtitle = 'Cyan'    then 2
                 when oxtitle = 'Magenta'    then 3
                 when oxtitle = 'Gelb'    then 4 end 

并尝试以下代码:

    echo "<table>";
   while($row = mysql_fetch_array($result_artikel))
 {
  $Daten_artikel['name'] = $row['oxtitle'];
  $Daten_artikel['oxsort'] = $row['oxsort'];
  $Daten_artikel['bild'] = $row['oxpic1'];

  // echo '<br>' . "Name: ".$Daten_artikel['name'];
 ?>
  <tr>
  <td>xzy</td>
   <td>
     <?php
   echo $Daten_artikel['name'] ;

   ?>
   </td>
  </tr>

 <?php
   }
  echo "</table>";
  ?>

编辑3。

  ORDER BY case when oxtitle like '%Schwarz%' then 1
             when oxtitle LIKE '%Cyan%'    then 2
             when oxtitle LIKE '%Magenta%'    then 3
             when oxtitle LIKE '%Gelb%'    then 4 end 

EDIT4: 由于您的需要,请使用此

     case when oxtitle like '%Schwarz%' and (oxsort = 13 or oxsort = 3 ) then 1
     .....
于 2013-07-27T15:21:38.707 回答