Mysql Abfrage bzw. Sortierung

crashx

Erfahrenes Mitglied
Hallo zusammen

Wegen dem Haufen Bäume sehe ich den Wald nicht mehr... oder wie war das mal...
Ich kann auch nicht mehr weiter suchen, denn ich kann das eigentlich ja garnicht, ich meine mysql

Code:
id  name            vornam           firma
1   Aregger         Herbert
2   Biedermann      Ivone
3                                    Abalone GmbH
4   Decker          Simon
5                                    Becker und Söhne

So ist in etwa die datenbank struktur und ja, wenn ein Firmenname eingetragen wird, muss kein Name oder Vorname eingegeben werden...
Ich möchte nun folgende Ausgabe erreichen

Abalone GmbH
Aregger Herbert
Becker und Söhne
Biedermann Ivone
Decker Simon

SQL:
$sql = mysqli_query($database, "SELECT * FROM 
                                 `kunden` 
                                 ORDER BY `name` ASC, `firma` ASC");

Ich weiss, eigentlich sollte ich es ja lassen weil ich es nicht kann und lernen werd ich es wohl auch nicht mehr :) Vielleicht findet sich ja aber jemand der mit helfen wird... oder mich auf die richtige Fährte schickt...

Grüsse
 
Hi

SQL:
SELECT
    *
FROM
    `kunden`
ORDER BY
    `name` ASC, 
    `firma` ASC
Das erste Problem ist ja nicht die Sortierung, sondern überhaupt jeweils Firma oder Name zu nehmen, abhängig davon wo was drinsteht. Ich nehme an, firma ist NULL wenn es einen Namen gibt (also kein leerer Text)
SQL:
SELECT
    CASE WHEN firma IS NOT NULL
        THEN firma
        ELSE CONCAT(name, ' ', vornam)
        END AS bezeichnung
FROM
    `kunden`
ORDER BY
    `name` ASC, 
    `firma` ASC
Liest sich so wie geschrieben: Wenn firma nicht NULL ist dann firma, sonst name+vorname zusammengehängt mit Leerzeichen dazwischen, und als Spaltenüberschrift für diese Ausgabespalte "bezeichnung" nehmen.

Habe vornam statt vorname drin, weil das bei dir auch so ist - falls es ein Fehler war, eben ausbessern.

Und nur am Rande, aber es gibt eine größere Menge von Leuten, die sowas wie einen Vornamen und/oder Nachnamen nicht haben (sondern bei denen der Name anders aufgebaut ist). Siehe auch https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/, auch wenn ein paar Erklärungen/Beispiele zu den Punkten nett wären.

Und jetzt noch zur Sortierung, zurzeit wird nach Name sortiert, und bei gleichen Namen entscheidet die Firma. Ist wohl nicht das was es werden soll ... mit der derzeitigen Ausgabe wäre eine Sortierung nach der Ausgabe genau richtig (denk ich?). Daher einfach
SQL:
SELECT
    CASE WHEN firma IS NOT NULL
        THEN firma
        ELSE CONCAT(name, ' ', vornam)
        END AS bezeichnung
FROM
    `kunden`
ORDER BY
    1
Sortiert nach der 1ten Ausgabespalte. Ja, das geht.

(ungetestet)
 
Hey Sheel

Mit deinem Input und ein wenig gebastel hats geklapt...
Noch nicht 100% aber es geht in die richtige Richtiung :)

PHP:
      echo '<div id="content">';
        echo '<ul class="ul_abc">';
          $abc = range('A', 'Z');
          for($i = 0; $i < count($abc); $i++){
            echo '<a href="'.$_SERVER['PHP_SELF'].'?section='.$_GET['section'].'&UID='.$abc[$i].'" class="abc">';
              echo '<li class="li_abc">'.$abc[$i].'</li>';
            echo '</a>';
          }
        echo '</ul>';
        echo '<ul class="ul_kunden">';
          if(isset($_GET['UID'])){
            $sql = mysqli_query($database,"SELECT
                               CASE WHEN firma <> ''
                               THEN CONCAT(firma, '-', kdn_nr)
                               ELSE CONCAT(name, '-', kdn_nr)
                               END AS output
                               FROM
                               kunden
                               WHERE name  LIKE '".$_GET['UID']."%'
                               OR    firma LIKE '".$_GET['UID']."%'
                               ORDER BY 1
                              ");
          }elseif(isset($_POST['suchen']) && $_POST['suchen'] != ''){
            $sql = mysqli_query($database,"SELECT
                               CASE WHEN firma <> ''
                               THEN CONCAT(firma, '-', kdn_nr)
                               ELSE CONCAT(name, '-', kdn_nr)
                               END AS output
                               FROM
                               kunden
                               WHERE name  LIKE '".$_POST['suchen']."%'
                               OR    firma LIKE '".$_POST['suchen']."%'
                               ORDER BY 1
                              ");
          }else{
            $sql = mysqli_query($database,"SELECT
                               CASE WHEN firma <> ''
                               THEN CONCAT(firma, '-', kdn_nr)
                               ELSE CONCAT(name, '-', kdn_nr)
                               END AS output
                               FROM
                               kunden
                               ORDER BY 1
                              ");
          }
          while($row = mysqli_fetch_array($sql)){
              $output = explode('-', $row['output']);
              $sql1 = mysqli_query($database, "SELECT * FROM kunden WHERE kdn_nr = '".$output[1]."' LIMIT 1");
              $row1 = mysqli_fetch_array($sql1);
              if($row1['name'] != '' && $row1['firma'] != ''){
                echo '<a href="kunden_detail.php?section='.$_GET['section'].'&SID='.$row1['kdn_nr'].'" class="a_kunden">';
                  echo '<li class="li_kunden">';
                    echo $row1['name'];
                  echo '</li>';
                  echo '<li class="li_kunden">';
                    echo $row1['vorname'];
                  echo '</li>';
                echo '</a>';
              }elseif($row1['name'] != ''){
                echo '<a href="kunden_detail.php?section='.$_GET['section'].'&SID='.$row1['kdn_nr'].'" class="a_kunden">';
                  echo '<li class="li_kunden">';
                    echo $row1['name'];
                  echo '</li>';
                  echo '<li class="li_kunden">';
                    echo $row1['vorname'];
                  echo '</li>';
                echo '</a>';
              }else{
                echo '<a href="kunden_detail.php?section='.$_GET['section'].'&SID='.$row1['kdn_nr'].'" class="a_kunden">';
                  echo '<li class="li_kunden" style="width: 524px;">';
                    echo $row1['firma'];
                  echo '</li>'; 
                echo '</a>';
              }
            echo '<form action="'.$_SERVER['PHP_SELF'].'?section='.$_GET['section'].'&SID='.$row1['kdn_nr'].'" method="POST">';
              echo '<li class="li_kunden_input">';
                echo '<input type="submit" name="auftrag_neu" value="" class="submit_auftragneu">';
              echo '</li>';
              echo '<li class="li_kunden_input">'; 
                echo '<input type="submit" name="del" value="" class="submit_userdeactivate">';
              echo '</li>';
            echo '</form>';
            if(!empty($row1['firma']) && $row1['firma'] != ''){
              echo '<a href="kunden_detail.php?section='.$_GET['section'].'&SID='.$row1['kdn_nr'].'" class="a_kunden">';
                echo '<li class="li_kunden" style="width: 180px; margin-left: 6px;">';
                  echo $row1['firma'];
                echo '</li>';
              echo '</a>';
            }else{
              echo '<li class="li_kunden_input" style="width: 180px; margin-left: 6px;"></li>'; 
            }
          }
        echo '</ul>';
      echo '</div>';

Danke
 

Anhänge

  • screen1.jpg
    screen1.jpg
    299,5 KB · Aufrufe: 2
Zuletzt bearbeitet:

Neue Beiträge

Zurück