Auslesen von bestimmten Datentupeln (MySQL 5.1)
Svensson
- datenbank
0 dave0 Benjamin Buxbaum0 Vinzenz Mai
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.
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?
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.
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!
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.
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
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