Peter Hanze: Problem bei Auswahl funktion

hi leute...

in meiner Datenbank will ich einigen leuten eine kleine suchfunktion anbieten...! das ganze sieht dann so aus:

WHERE typ = '".$typ."'

der typ wir anfangs einfang mit geliefert...!

Problem:

die datei soll anfangs alle typen ausgeben! wenn ich nun keinen wert mitsende kommt logischerweise ein fehler! also meine lösung:

if(!$typ)
{
$letzten10 = mysql_query("SELECT
....
                        FROM
...
                        ORDER BY
                            stamp DESC
                        LIMIT
                            30") or die(mysql_error());
}
else
{
$letzten10 = mysql_query("SELECT
...
                        FROM
...
   WHERE
       typ = '".$typ."'
                        ORDER BY
                            stamp DESC
                        LIMIT
                            30") or die(mysql_error());
}
$noc = mysql_num_rows($letzten10);

ich finde allerdings das, dass ganze sehr unschön aussieht, ... gibts da evt. nen zeichen oder so für den ich als typ einsetzen könnte der alles ausgibt habs jetzt noch net mit nem (*) versucht aber ich denke es wird auf das gleiche hinaus kommen!

mit freundlichen grüßen,
Peter

  1. Wie wärs damit?
    ... = mysql_query(sprintf('SELECT ... FROM ... %s ORDER ...',
      ($typ ? "WHERE typ='$typ'" : '')) or die...

    1. Wie wärs damit?
      ... = mysql_query(sprintf('SELECT ... FROM ... %s ORDER ...',
        ($typ ? "WHERE typ='$typ'" : '')) or die...

      erst einmal danke für die schnelle antwort,
      sieht ganz gut aus - aber wofür steht das %s?

      mit freundlichen grüßen
      Peter

      1. Wie wärs damit?
        ... = mysql_query(sprintf('SELECT ... FROM ... %s ORDER ...',
          ($typ ? "WHERE typ='$typ'" : '')) or die...

        erst einmal danke für die schnelle antwort,
        sieht ganz gut aus - aber wofür steht das %s?

        Das findest du im Handbuch zur Funktion sprintf(). Es gibt da noch mehr Möglichkeiten...

        1. $letzten10 = mysql_query("SELECT
          ...
                                  FROM
                                    ...
             %s
                                  ORDER BY
                                      stamp DESC
                                  LIMIT
                                      30, ($typ ? "WHERE typ='$typ'" : ''))   ") or die(mysql_error());

          also so will es nicht ganz funktionieren... was mach ich nur falsch?

          mfg
          peter

          1. hi,

            $letzten10 = mysql_query("SELECT
            ...
                                    FROM
                                      ...
               %s
                                    ORDER BY
                                        stamp DESC
                                    LIMIT
                                        30, ($typ ? "WHERE typ='$typ'" : ''))   ") or die(mysql_error());

            also so will es nicht ganz funktionieren... was mach ich nur falsch?

            du hast das sprintf, welches sich im beispielcode nicht ohne grund befand, unterschlagen ...

            aber ich würde eh abraten, es so zu machen - nicht gerade übersichtlich, erschwert das debuggen, späteres erweitern, etc.

            ich würde mir eher vorher eine variable $where definieren, die entweder ganz leer bleibt, oder eben 'WHERE bedingung' zugewiesen bekommt, und diese dann in den query-string einsetzen:

            $query = "SELECT x,y FROM tabelle ".$where." ORDER BY ...";

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
            1. du hast das sprintf, welches sich im beispielcode nicht ohne grund befand, unterschlagen ...

              aber ich würde eh abraten, es so zu machen - nicht gerade übersichtlich, erschwert das debuggen, späteres erweitern, etc.

              Das ist sicherlich Geschmackssache. Ich z.B. finde solche Konstrukte

              $s = "foo: '" . $bar . "', bla: '" . $fasel . "'";

              unübersichtlicher als solche:

              $s = sprintf("foo: '%s', bla: '%s'", $bar, $foo);