Array als SQL anfrage?

dg87

Erfahrenes Mitglied
Hallo.

ich lass mir gerade von einer Thread Tabelle besondere ID´s ausgeben. Das klappt auch wunderbar.
Hab bei meinem Beispiel jetzt drei ID´s rausgefiltert die in einer Variabel stehen.
Da es ja mehrere ID´s sind, ist es also ein Array bei mir mit dem namen themeid.

Jetzt will ich genau die ID´s die in diesem Array stehen zu einer Tabelle hinschicken, die genau die Titel auspuckt, die die gleiche ID haben.
Deswegen wollte ich wissen, ob es möglich ist auch 'themeid' als Array hinzuschicken irgendwie, damit ich die Titel bekomme.
Weiß das is blöd erklärt, hier nochmal in kurzform:

-> Ich habe in einem Array IDs gespeichert, die ich davor rausgefiltert hab
-> Nun will ich diese IDs mit einem Query an eine andere Tabelle schicken,
damit entsprechend bei identischer ID der dazugehöriger Titel kommt.

Problem ist halt das wahrscheinlich kein Array sich in mysql verschicken lässt oder. Weil im Endefekt weiß ich ja nicht wie viele IDs in dem Array drinnen sind also wird mir foreach auch ned viel helfen oder?
 
Das kannste auch gleich in einer Query mit einem Join lösen:
SQL:
SELECT `themen`.`themeid`, `namen`.`themenname` FROM `themen`
LEFT JOIN `namen`
ON `namen`.`themenid` = `themen`.`themenid`

Dann einfach [phpf]mysql_query[/phpf] und [phpf]mysql_fetch_array[/phpf] oder wie du auch immer deine Query abschickst und dir steht in dem Resultarray sowohl die ThemenID als auch der name zur verfügung, z.B:
PHP:
// query etc.
while($row = mysql_fetch_array($query))
    echo "Themenid: {$row['themenid']}, Name: {$row['themenname']}\n";
 
Zuletzt bearbeitet:
SQL:
SELECT
    *
FROM
    `table`
WHERE
    `id` IN ( {implode(',', $values)} )

Entsprechend müsste der PHP Part - hier in geschweiften Klammern - noch eingepasst werden, hatte jetzt aber keine Lust auf nen zerrütteltes Geschreibsel. Sollten die IDs nicht vollständig aus Zahlen bestehen, sollte mit [phpf]array_map[/phpf] oder ähnlichen Funktione zuvor jeder Value im Format $value = "'" . mysql_real_escape_string($value) . "'" modifiziert werden.

Maus Lösung erinnert mich auch an das Stichwort Subselect:

SQL:
SELECT
    *
FROM
    `table`
WHERE
    `id` IN (
        SELECT `value` FROM `t2` WHERE `condition`
    )
 
Zuletzt bearbeitet:
ok ok langsam irgendwie versteh ich grad fast gar nichts.
Aber anscheinend versteht ihr mein Problem, das ist schon mal gut.
Die erste Lösung mit den Join kapier ich ned und schaut auch ned so aus, als würde is mein problem lösen.
Die zweite Lösung hat mir besser gefallen, aber trotzdem um es nochmal zu veranschaulichen hier meine Daten, damit ich es besser verstehe.
(Es geht schließlich bei mir um ein Forum)

Es gibt die erste Tabelle 'post' :

Dort hole ich mir die Tabellen IDs raus, die entsprechend zu dem Überthema gehören
(Das passt schon und hab ich gemacht.)

Es stehen also in meinen Array folgende Daten:

Code:
Array
(
    [0] => Array
        (
            [THEMEID] => 9
        )

    [1] => Array
        (
            [THEMEID] => 10
        )

    [2] => Array
        (
            [THEMEID] => 11
        )

)

Das heißt der eine Beitrag gehört zu themeid 9 der zweite zu 10 usw.
Die Titel stehen aber in der Tabelle topic und ich will auch nur die Titel diesmal ausgeben.

Das heißt ich will die Titel haben wo von der topic Tabelle die ID gleich der ID der Beiträge ist(Themeid)
Es sind hier also drei Themeids die hingeschickt werden müssen und drei themen die ich bekomme.
Jetzt wars zwar ausführlich aber einfacher nachvollziehen.
Also könnte die zweite Lösung gut darauf passen oder? oder vielleicht konkrete beispiele wo ich mich mit dem Variablen Namen nicht so schwer tu.

Danke nochmal
 
Zuletzt bearbeitet:
Meine Lösung geht auch. Und du benötigst nur eine Query! Ergo weniger Schreibarbeit und weniger Serverlast.
SQL:
SELECT
    `posts`.`themenid`, `topic`.`titel`
FROM
    `posts`
LEFT JOIN
    `topic`
    ON
        `topic`.`id` = `posts`.`themenid`
 
Ahja ok und die Syntax geht auch so?

Du selektierst hier beide sachen von beiden tabellen, ok das stimmt aber wieso machst du dann nur from post?
Weil die Titel ja in topic stehen.

Kannste mir des vielleicht erklären wäre nett. Weil mit einem Query wäre das Optimal, das hieße ja dann, dass mein Query wo die ID´s selektiert werden auch wegfallen würde ;-)
 
Nur FROM `posts`, weil ich auf die Tabelle `topic` ja ein JOIN ausführe. Dadurch bekomme ich zu dem entsprechenden Datensatz `themenid` in `posts` den Entsprechenden Eintrag aus `topic`, bei dem die `id` der `themenid` aus `posts` gleicht. Ist kein Datensatz in der Tabelle `topic` vorhanden, wird dieser mit null gefüllt.
Siehe auch MySQL Handbuch: 13.2.7.1. JOIN
 
SELECT konnte nicht durchgeführt werden!
ERROR 0: Zeile 2: Falsche Syntax in der Nähe von '`'.

SELECT:
SELECT `pp4fposts`.`themeid`, `pp4ftheme`.`titel` FROM `pp4fposts` LEFT JOIN `pp4ftheme` ON `pp4ftheme`.`themeid` = `pp4fposts`.`themeid`

Hmm sind die ` doch falsch?
 
Nee die sind schon richtig. Muss man nicht machen, aber das stellt sicher, dass auch wenn eine Tabelle oder Spalte wie ein reserviertes Wort von MySQL heißt, dass eben kein Error kommt :)
Ist der Fehler die Ausgabe von [phpf]mysql_error[/phpf]?
PHP:
$query = mysql_query($select) or die(mysql_error());
 
Zurück