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 ループの外側に結果を出力すると、配列には 1 つの名前 (oxtitle) しかありません。そして、これは私が修正できないという私の問題です。

while ループの外側に結果が必要です。これは、ページの後半に IF ステートメントで入力する必要がある html テーブルがあるためです。

例:

<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>

これはほんの一例です。しかし、これは機能しません。配列内の原因は、たとえば「車」などの 1 つの名前 (oxtitle) だけです。したがって、ifステートメントは機能しません。それは次の場合にのみ機能します: if array == car.

解決策の 1 つは、while ループ内に if ループを含むすべてのテーブル html コードを配置することです。しかし、これは、echo '' などを使用して常に wile ループ内で作業する必要があることを意味します。そして、これはそれほどうまくありません。「私の」やり方で仕事をすることができる別の魂があることを願っています。if ステートメントを操作できるように、配列には while ループの外側でもすべての名前 (oxtitles) が含まれていることを意味します。

私の悪い英語でごめんなさい。あいさつ。

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>";
?>

EDIT2; 私はあなたを理解したかどうか確信が持てませんが、この解決策は、

注文を次のように変更します。

   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>";
  ?>

EDIT3。

  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 に答える