Svensson: Auslesen von bestimmten Datentupeln (MySQL 5.1)

Guten Tag.
Ich bin gerade dabei eine kleine Seite für eine Firma zu erstellen und bin dabei auf ein kleines Hindernis gestoßen.

Suchfunktionen habe ich schon benutzt doch nichts hilfreiches gefunden.

Und zwar geht es darum, dass ich aus einer Tabelle nur bestimmte Datensätze, mit bestimmten IDs auslesen will bzw. muss.

Das Array (PHP) sieht bsw. so aus:

$adressen = array(5,34,6,123,53,66);

Normalerweise würde ich hier mit dem Vergleichsoperator OR vorgehen:

  
$sql = "SELECT  
			*  
		FROM  
			".MYSQL_PREFIX."auctioneer_sales  
		WHERE  
			id = 5 OR id = 34 OR ..... usw.  
	";  
$result = mysql_query($sql) OR die(mysql_error());

Nun, da die Tabelle(n), die ich hier benutze recht groß sind, würde dadurch ein recht großer Query zustande kommen, was ich natürlich vermeiden will.

Soetwas mit einem Array, wie:

  
$sql = "SELECT  
			*  
		FROM  
			".MYSQL_PREFIX."auctioneer_sales  
		WHERE  
			id = '".$adressen."'  
	";  
$result = mysql_query($sql) OR die(mysql_error());

...habe ich schon ausprobiert - erfolglos.

Gibt es für so eine Anwendung eine bestimmte SQL-Funktion oder wie muss man da am besten vorgehen?
Ich würde mich über hilfreiche Antworten sehr freuen.

  1. hi,

    $adressen = "5,34,6,123,53,66";

      
    $sql = "SELECT  
    			*  
    		FROM  
    			".MYSQL_PREFIX."auctioneer_sales  
    		WHERE  
    			id IN (".$adressen.")  
    	";  
    $result = mysql_query($sql) OR die(mysql_error());
    

    so evtl?

    1. hi,

      $adressen = "5,34,6,123,53,66";

      $sql = "SELECT
      *
      FROM
      ".MYSQL_PREFIX."auctioneer_sales
      WHERE
      id IN (".$adressen.")
      ";
      $result = mysql_query($sql) OR die(mysql_error());

      
      >   
      > so evtl?  
        
      Das wirds wohl sein ^^  
      Ich dachte nur, es gibt eine SQL-Funktion, die mit arrays arbeiten kann - Schade!  
        
      Danke für die Info.
      
      1. Hi!

        Ich dachte nur, es gibt eine SQL-Funktion, die mit arrays arbeiten kann - Schade!

        Da ein DBMS nicht mit Arrays am Hut hat (braucht es nicht, es kann auf andere Weise mit Datenmengen umgehen), hat es auch keine Möglichkeit, mit Arrays umzugehen, und schon gar nicht mit solchen aus anderen Systemen, hier PHP. Zudem ist ein SQL-Statement ein String und alle einzufügenden Werte müssen als Literal eingefügt werden. Wie aber sähe das Literal eines Arrays aus, und wodurch würde es sich durch eine Auflistung von Einzelwerten unterscheiden?

        Es gibt aber die PHP-Funktion implode(), um aus einem Array einen String zu erzeugen. Wichtig ist jedoch auch hier, sicherzustellen, dass die IDs auch wirklich Zahlen sind und nicht etwa direkt aus manipulierbaren Nutzereingaben stammen.

        Lo!

    2. hi,

      $adressen = "5,34,6,123,53,66";

      $sql = "SELECT
      *
      FROM
      ".MYSQL_PREFIX."auctioneer_sales
      WHERE
      id IN (".$adressen.")
      ";
      $result = mysql_query($sql) OR die(mysql_error());

      
      >   
      > so evtl?  
        
      Auch wenn du es schon anders gelöst hast - schau dir die php-Funktion implode auf php.net an.
      
  2. Hi Svensson!

    Das Array (PHP) sieht bsw. so aus:

    $adressen = array(5,34,6,123,53,66);

    Normalerweise würde ich hier mit dem Vergleichsoperator OR vorgehen:

    Eher nicht. Ich würde folgendes verwenden:

    WHERE id in (5, 34, ...)

    Das kannst Du entsprechend per Schleife aus dem Array generieren.

    mfG
    Benjamin

    --
    For animals, the entire universe has been neatly divided into things to (a) mate with, (b) eat, (c) run away from, and (d) rocks.
  3. Hallo,

    Und zwar geht es darum, dass ich aus einer Tabelle nur bestimmte Datensätze, mit bestimmten IDs auslesen will bzw. muss.

    woher stammen diese bestimmten IDs? Aus einer Abfrage?

    Normalerweise würde ich hier mit dem Vergleichsoperator OR vorgehen:

    $sql = "SELECT
    *
    FROM
    ".MYSQL_PREFIX."auctioneer_sales
    WHERE

    Gibt es für so eine Anwendung eine bestimmte SQL-Funktion oder wie muss man da am besten vorgehen?

    Wenn ja: Es gibt Unterabfragen:

    [code lang=sql]SELECT
        <spaltenliste> -- Es ist fast immer eine gute Idee, SELECT * zu vermeiden
    FROM
        tabelle
    WHERE
        id IN (
            SELECT
                myid
            FROM
                tabelle2
            WHERE
                <bedingung, die Dir die id-Liste liefert>
        )

      
    MySQL unterstützt Unterabfragen seit Version 4.1 - eine Version, die von MySQL [nicht mehr unterstützt wird](http://www.mysql.com/about/legal/lifecycle/#calendar). Solltest Du eine noch ältere Version benutzen müssen, denke ernsthaft über einen Anbieterwechsel nach.  
      
      
    Freundliche Grüße  
      
    Vinzenz