CC: PHP & MySQL (SELECT)

Hi, OK noch mal irgendwie waren die Tabellen verrutscht.

lieferservice
-------------
shopID
name
adresse
...
liefergebiete  <--- Alle Stadtteile, die der shop beliefert

bezirke
-----------
ID
stadtteil  <--- Das ist immer genau ein Stadtteil
stadt

liste
-----------
shop
bezirk
rang

Ok, so sehen die Tabellen aus. Rang = Platz in der Liste des Liefergebietes.
Aber verdammt viele Gebiete und verdammt viele shops, daher die Frage ob es bei der Auflistung aller shops in einem
Liefergebiet(bezirk) nicht mit LIKE %stadtteil% geht. Damit man bei der Eingabe Zeit spart.
Mit dem ersten SELECT werden die ersten drei Plätze ausgelesen, aber auf der zweiten Seite (list == all) sollen
alle Shops aufgeführt werden, aber als erstes wieder die mit rang 1-3. Jetzt gibt es aber sauviele shops und stadtteile
und gibt's da keine einfachere Lösung das so anzuordnen als alle shops über die TABELLE liste mit den entsprechenden
bezirken zu verknüpfen. Das macht beim Eingeben doch viel viel viel mehr Arbeit als die bezirke unter
liefergebiete einzutragen.
aufzulisten und dann mit LIKE %stadtteil% danach zu suchen.

Aber kann mann den SELECT-Befehl so gestalten, das er erst die drei mit dem rang 1-3 ausliest und dann alle anderen ?

Mein Script:

/* -------------------- Erste 3 Auflisten --------------- */

if ($list == 3)
{
$sql_query = "SELECT l.shopID, l.name, l.adresse, l.link, l.zeit, l.stadt, l.liefergebiete
FROM lieferservice l, bezirke b, liste r WHERE l.liefergebiete LIKE '%$mode%' AND b.stadtteil='$mode' AND l.stadt='B'
AND
l.shopID=r.shop AND b.ID=r.bezirk ORDER BY r.rang";
$result = mysql_db_query($db, $sql_query);
$rows   = mysql_num_rows($result);

...
Ausgabe
...

}
/* -------------------- Alle Auflisten --------------- */ Funktioniert net wie ich will

if ($list == alle)
{
$sql_query = "SELECT l.shopID, l.name, l.adresse, l.link, l.zeit, l.stadt, l.liefergebiete
FROM lieferservice l, bezirke b, liste r WHERE l.liefergebiete LIKE '%$mode%'";
$result = mysql_db_query($db, $sql_query);
$rows   = mysql_num_rows($result);

...
Ausgabe
...

}

Danke im voraus

CC

  1. Hallo !

    lieferservice

    shopID
    name
    adresse
    ...
    liefergebiete  <--- Alle Stadtteile, die der shop beliefert

    bezirke

    ID
    stadtteil  <--- Das ist immer genau ein Stadtteil
    stadt

    liste

    shop
    bezirk
    rang

    Das sieht schon viel besser aus ! :-)

    Jetzt gibt es aber sauviele shops und stadtteile und gibt's da keine einfachere Lösung das so anzuordnen als alle shops über die TABELLE liste mit den entsprechenden bezirken zu verknüpfen. Das macht beim Eingeben doch viel viel viel mehr Arbeit als die bezirke unter liefergebiete einzutragen.

    Die Eingabe hat zunächst nichts mit der Speicherung der Daten zu tun.
    Sicherlich kannst du dir eine Eingabemaske basteln, in die du alle Lieferbezirke z.B. durch Kommata getrennt hintereinander eingibst.
    Im Script, das die Daten dann abspeichert, zerlegst du dieses Eingabefeld und speicherst die einzelnen Werte in der Tabelle Liste.

    Oder du verwendest z.B. Access als Frontend für deine MySQL-DB, dann kannst du eine Forumlar mit Unterformular anlegen. Das ist einfacher als man denken sollte.

    Mein Script:

    /* -------------------- Erste 3 Auflisten --------------- */

    if ($list == 3)
    {
    $sql_query = "SELECT l.shopID, l.name, l.adresse, l.link, l.zeit, l.stadt, l.liefergebiete
    FROM lieferservice l, bezirke b, liste r WHERE l.liefergebiete LIKE '%$mode%' AND b.stadtteil='$mode' AND l.stadt='B'
    AND
    l.shopID=r.shop AND b.ID=r.bezirk ORDER BY r.rang";
    $result = mysql_db_query($db, $sql_query);
    $rows   = mysql_num_rows($result);

    ...
    Ausgabe
    ...

    }
    /* -------------------- Alle Auflisten --------------- */ Funktioniert net wie ich will

    if ($list == alle)
    {
    $sql_query = "SELECT l.shopID, l.name, l.adresse, l.link, l.zeit, l.stadt, l.liefergebiete
    FROM lieferservice l, bezirke b, liste r WHERE l.liefergebiete LIKE '%$mode%'";
    $result = mysql_db_query($db, $sql_query);
    $rows   = mysql_num_rows($result);

    ...
    Ausgabe
    ...

    Abgesehen davon, dass das Feld liefergebiete der Tabelle lieferservice - wie oben gesagt - überflüssig (weil doppelt gemoppelt) ist, fehlt (auf den ersten Blick) in der 2. Query die Verknüpfung zwischen den Tabellen über die IDs, wodurch du wahrscheinlich _viieeeeel_ mehr Ergebnisse erhalten hast, als du wollest.

    Gruß,

    kerki