Jump to content
Torsten_OL

Daten sortieren

Recommended Posts

osCommerce Online Merchant v2.3.4

Hallo zusammen.

Ich (Torsten der Laie) benötige mal wieder etwas Hilfe.

Die osCommerce Daten möchte ich in eine Excel-Datei exportieren.
Das klappt auch soweit ganz gut - sicherlich gibt es elegantere Lösungen.

Nun möchte ich die Daten sortiert ausgeben 

1. sortiert nach: categories_id
2. nach: products_name

Aber ich weiß nicht wo und wie ich "order by" einbinden muss.

Danke für die Hilfe

Anbei der Code meiner Datei.

<!--
p.products_id,  
p.products_model, 
p.products_gesundheit, 
p.products_gesundheit2
p.products_hoehe, 
p.products_quantity, 
p.products_duftst, 
p.products_weight, 
p.products_image, 
p.products_price, 
p.products_tax_class_id, 
p.products_date_added, 
p.products_date_available,
p.manufacturers_id 
pd.products_name, 
pd.products_registered, 
pd.products_description,
pd.products_bluehsorte, 
pd.products_bluetenfarbe, 
pd.products_bluetezeit, 
pd.products_url, 

-->

<?php

require('includes/application_top.php');
require('includes/configure.php');
require('includes/database_tables.php');
require(DIR_WS_INCLUDES . 'template_2_top.php');

 


 $myfile = fopen("excel_daten_file.xls", "w") or die("Unable to open file!");
error_reporting(E_ALL);
$db_link = mysqli_connect (DB_SERVER, 
                           DB_SERVER_USERNAME, 
                           DB_SERVER_PASSWORD, 
                           DB_DATABASE);
 
if ( $db_link )
{
    
    $TEXT_DATEN_EXPORT_VERBINDUNG ="Verbindung erfolgreich";
   // print_r( $db_link);
}
else
{
   $TEXT_DATEN_EXPORT_VERBINDUNG =("keine Verbindung möglich" . mysqli_error());
   
}


$sql_products  = "SELECT * FROM products  ";
$db_products = mysqli_query( $db_link, $sql_products );

$sql_products_description  = "SELECT * FROM products_description ";
$db_products_description = mysqli_query( $db_link, $sql_products_description );

 

if ( ! $db_products )
{
    $TEXT_DATEN_EXPORT_VERBINDUNG =("Ungültige Abfrage" . mysqli_error());
  
}
 
  
 ?>
 
 <td><table border="0" cellspacing="2" cellpadding="2">
            <tr><td class="main"><?php echo $TEXT_DATEN_EXPORT_VERBINDUNG; ?>    </td>
            <td class="pageHeading" align="right"><a href="excel_daten_file.xls" download="excel_daten_file.xls"><?php echo tep_draw_button("Excel-Datei speichern" , 'calculator'); ?></a></td>
            </tr>
</table></td>      
 
 
 
 

<?php  
 
 
echo '<table border="1">';

echo "<tr>";
  echo "<td>". "pID" . "</td>";
  echo "<td>". "mID" . "</td>";
  echo "<td>". "Z&uuml;chter" . "</td>";
  echo "<td>". "cID" . "</td>";
  echo "<td>". "Sortiment" . "</td>";
  echo "<td>". "ID" . "</td>";
  echo "<td>". "Liter" . "</td>";
  echo "<td>". "Name_EN" . "</td>";
  echo "<td>". "Name_DE" . "</td>";
  echo "<td>". "image" . "</td>";
  echo "<td>". "Beschreibnug_EN" . "</td>";
  echo "<td>". "Beschreibung_DE" . "</td>";
  echo "<td>". "H&ouml;he" . "</td>";
  
  echo "<td>". "Farbe_EN" . "</td>";
  echo "<td>". "Farbe_DE" . "</td>";
  echo "<td>". "telefon" . "</td>";
  echo "</tr>";

while ($zeile = mysqli_fetch_array( $db_products, MYSQL_ASSOC))
{
    $zeile_eng = mysqli_fetch_array( $db_products_description, MYSQL_ASSOC);
    $zeile_deu = mysqli_fetch_array( $db_products_description, MYSQL_ASSOC);
    
    
  $num = $zeile['manufacturers_id']; 
  $sql_manufacturers = "SELECT * FROM manufacturers WHERE manufacturers_id LIKE '$num' ";
  $db_manufacturers = mysqli_query( $db_link, $sql_manufacturers );
  $zeile_man = mysqli_fetch_array( $db_manufacturers, MYSQL_ASSOC);
 
  $num = $zeile['products_id']; 
  $sql_products_to_categories = "SELECT * FROM products_to_categories WHERE products_id LIKE '$num' ";
  $db_products_to_categories = mysqli_query( $db_link, $sql_products_to_categories );
  $zeile_cat = mysqli_fetch_array( $db_products_to_categories, MYSQL_ASSOC);
  
  $num = $zeile_cat['categories_id']; 
  $sql_categories_description = "SELECT * FROM categories_description WHERE categories_id LIKE '$num' ";
  $db_categories_description = mysqli_query( $db_link, $sql_categories_description );
  $zeile_cat_desc = mysqli_fetch_array( $db_categories_description, MYSQL_ASSOC);
    
    
    
    // Bildschirmausgabe
    
  
    echo "<tr>";
  echo "<td>". $zeile['products_id'] . "</td>";
  echo "<td>". $zeile['manufacturers_id'] . "</td>";
  echo "<td>". $zeile_man['manufacturers_name'] . "</td>";
  echo "<td>". $zeile_cat['categories_id'] . "</td>";
  echo "<td>". $zeile_cat_desc['categories_name'] . "</td>";
  echo "<td>". $zeile['products_model'] . "</td>";
  echo "<td>". $zeile['products_weight'] . "</td>";
  echo "<td>". $zeile_eng['products_name'] . "</td>";
  echo "<td>". $zeile_deu['products_name'] . "</td>";
  echo "<td>". $zeile['products_image'] . "</td>";
  echo "<td>". $zeile_eng['products_description'] . "</td>";
  echo "<td>". $zeile_deu['products_description'] . "</td>";
  echo "<td>". $zeile['products_hoehe'] . "</td>";
  
  echo "<td>". $zeile_eng['products_bluetenfarbe'] . "</td>";
  echo "<td>". $zeile_deu['products_bluetenfarbe'] . "</td>";
  echo "<td>". $zeile['telefon'] . "</td>";
  echo "</tr>";

 

  
  // Exceldaten zusammen stellen - leider noch unsortiert
  $xls = 
   $zeile_cat['categories_id'] . "\t". 
   $zeile_deu['products_name']. "\t". 
   $zeile_cat_desc['categories_name']. "\t". 
   $zeile_man['manufacturers_name'] ."\n" ;
  
  
  
 // Exceldaten in Datei schreiben
 fwrite($myfile, $xls);
}

fclose($myfile);
echo "</table>";
 
mysqli_free_result( $db_products );

?>

<a href="excel_daten_file.xls" download="excel_daten_file.xls"><?php echo tep_draw_button("Excel-Datei speichern" , 'calculator'); ?></a>
<?php

  require(DIR_WS_INCLUDES . 'template_bottom.php');
  require(DIR_WS_INCLUDES . 'application_bottom.php');
?>
 

 

Share this post


Link to post
Share on other sites

 

Dies

$num = $zeile['manufacturers_id']; 
$sql_manufacturers = "SELECT * FROM manufacturers WHERE manufacturers_id LIKE '$num' ";
$db_manufacturers = mysqli_query( $db_link, $sql_manufacturers );
$zeile_man = mysqli_fetch_array( $db_manufacturers, MYSQL_ASSOC);

ändern zu:

$manufacturers_query = tep_db_query("select * from manufacturers where manufacturers_id like '%".$zeile['manufacturers_id']."%' order by categories_id, products_name ");
$manufacturers = tep_db_fetch_array($manufacturers_query);

Die weiteren Abfragen entsprechend ändern. Du solltest die Funktionen von osCommerce verwenden, bei späteren Änderungen muss nur dort geändert werden. Die ORDER BY clausel ist für die Sortierung bei MySQL zuständig. In meiner empfohlene Änderung wird zuerst nach categories_id und dann nach products_name sortiert.

Dies hilft auch: https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html

Für Excel gibt es übrigends eine mächtige Class Datei, die vieles vereinfacht, hier:

https://github.com/PHPOffice/PhpSpreadsheet

Edited by oscspezialist

Share this post


Link to post
Share on other sites

Danke für die schnelle Antwort

Aber irgendwie haben wir uns da wohl falsch verstanden oder ich habe das falsch umgesetzt.

Ich möchte das meine Artikel aus der Datenbank sortiert aufgeführt werden. 
Sortierung nach categories_id was ja gleichbedeutend mit categories_name wäre. Anschließend den  products_name  sortiert. Alles weitere aus der Datenbank ist erst einmal nicht so wichtig.

categories_id   - - -  categories_name - - - products_name  

22                           Beetrosen               Alabaster
22                           Beetrosen              Amber
22                           Beetrosen              Nina
22                           Beetrosen              Shanty
23                           Bodendecker         AAAA
23                           Bodendecker        BBBB
23                           Bodendecker        CCCC
24                           Edelrose                AAAA
24                           Edelrose                BBBB
24                           Edelrose                CCCC
25                          Englische Rose      AAAA
25                          Englische Rose       BBBB

usw. 

Mit diesen Zeilen verbinde ich lediglich den Artikel mit den dazu gehörenden  manufacturers,    products_to_categories  und  categories_description.

Wie schon gesagt ich bin ziemlicher Laie und einigermaßen Froh darüber, dass ich überhaupt  Daten aus der Datenbank in eine Excel-Datei bekomme.

Für eine weitere Hilfe wäre ich schon dankbar, 
Torsten

 

Edited by Torsten_OL

Share this post


Link to post
Share on other sites

Wenn die Daten nach der categories_id sortiert werden, ist das nicht gleich bedeutend mit categories_name.

Beispiel:
categories_id = 1, categories_name = bbbbb
categories_id = 2, categories_name = aaaaa

Wenn Du nach categories_id  sortierst kommt 'bbbbb' als erstes.

 

Share this post


Link to post
Share on other sites

Ja - OK - 

Da  categories_id und  categories_name  miteinander verknüpft sind, lasse ich den  categories_name   aus vor.

Aber wie bekomme ich dann in meinen Code die Sortierung: erstens nach categories_id und zweitens nach  products_name  ?

 

Baue ich nun diesen Code ein:

$manufacturers_query = tep_db_query("select * from manufacturers where manufacturers_id like '%".$zeile['manufacturers_id']."%' order by categories_id, products_name ");
$manufacturers = tep_db_fetch_array($manufacturers_query);

bekomme ich folgende Meldung

1054 - Unknown column 'categories_id' in 'order clause'

select * from manufacturers where manufacturers_id like '%11%' order by categories_id, products_name 

- auch verstehe ich nicht warum manufacturers mit dabei ist.

Share this post


Link to post
Share on other sites
vor 9 Minuten, Torsten_OL said:

Ja - OK - 

Da  categories_id und  categories_name  miteinander verknüpft sind, lasse ich den  categories_name   aus vor.

Aber wie bekomme ich dann in meinen Code die Sortierung: erstens nach categories_id und zweitens nach  products_name  ?

 

Baue ich nun diesen Code ein:


$manufacturers_query = tep_db_query("select * from manufacturers where manufacturers_id like '%".$zeile['manufacturers_id']."%' order by categories_id, products_name ");
$manufacturers = tep_db_fetch_array($manufacturers_query);

bekomme ich folgende Meldung

1054 - Unknown column 'categories_id' in 'order clause'

select * from manufacturers where manufacturers_id like '%11%' order by categories_id, products_name 

- auch verstehe ich nicht warum manufacturers mit dabei ist.

War auch mehr als Anregung gedacht den Code entsprechend zu ändern. Sende mir mal Deine Datei per E-Mail. Schaue in Deine PM, da steht wie. Danke!

Edited by oscspezialist

Share this post


Link to post
Share on other sites

×