MySQL Komma getrennte Abfrage

MDX

Mitglied
Hallo,
ich habe eine Reihe von Zahlen welche durch ein Komma getrennt sind. Bsp:
1,3,2,3,1,2,5,2,4,8,3
.
Diese sind die ID in der Tabelle "list_entrys".
Nun soll aus derselben Tabelle in der richtigen Reienfolge der dazugehörige Titel abgefragt werden. Ich könnte es zwar mit
HTML:
SELECT title FROM list_entrys WHERE id IN [...]
machen, allerdings wird hier das merhmalige vorkommen einer Zahl nicht beachtet.
Ich probiere das jetzt nun schon länger aber bekomme es einfach nicht hin... Aber wahrscheinlich ist die Lösung viel einfacher als Gedacht ;)
 
Hast du eine ID-Spalte mit diesen Zahlen, oder wie?

Wie wärs damit:
SQL:
SELCT id, title FROM list_entrys ORDER BY id DESC

PS: Der Plural von entry ist entries ;)
 
Also DIe Tabelle sieht folgendermaßen aus:

id | title | text
1 | hello | lorem ipsum vblala
2 | test | jskdjskcjchlasklasd
3 | 123 | die ist ein eintrag

Und nun soll aus der Liste 1,2,3,2,3,2,3,3, immer die Einträge in der richtigen Teihenfolge angezeig werden, also z.B.:
hello,test,123,test,123,test,123,test,123,123

BTW: Ja ich weiß ;)
 
Hau die doppelten Werte einfach raus:
Code:
function remove_double_entries($str){
  $arr = explode(",", $str);
  $unique = array_unique($arr);
  return implode(",",$unique);
}
 
Moin
macht es einen sinn sie doppelt und dreifach abzufragen oder einfach nur auszugeben ansonsten könntest du folgendes machen:

PHP:
  // Step 1: Erstelle deine geünschte Liste in ein Array
  $search = array(1, 2, 3, 2, 3, 2, 3, 3);
  $cut_search = array_unique($search);

  // Setep 2: Bilder aus der Liste eine minimale Abfrage
  $select = 'SELECT title FROM tabelle WHERE id=';
  for($i=0; $i<=count($cut_search)-1; $i++){
    $select .= $cut_search[$i].' || id=';
  }
  $select = substr($select, 0, -7);

  // Step 3: Lass deine erstelle Abfrage auf die DB los^^
  $get = mysql_fetch_array(mysql_query($select));

  // Step 4: Bilde aus der abgefragten Liste deine Ausgabe
  for($j = 0; $j<=count($search)-1; $j++){
    echo $get[($search[$j]-1)].'<br />';
  }

Ist zwar kein schöner weg aber sollte funktionieren
Gruß Ian
 
Dann werf ich auch noch was in den Raum.

PHP:
$liste = "1,2,3,2,3,2,3,3";

//mysql wird sich um die doppelten kümmern und sie ignorieren
$query = "SELECT id, title FROM list_entrys WHERE id IN ($liste)";

$result = mysql_query($query);

//unsere key/value-liste (eigentlich ein Array), welche zu jeder id den Titel enthalten wird
$key_value_list = array();

//die Liste wird befüllt
while($row = mysql_fetch_row($result)) {
	$key_value_list[$row[0]] = $row[1];
}

//die Sequenz durchlaufen und im Array den Titel nachschlagen
$sequenz = explode(',',$liste);

foreach($sequenz as $foo) {
	echo $key_value_list[$foo];
	echo ",";
}

//Ausgabe: "hello,test,123,test,123,test,123,test,123,123,"
 
Man kann die sortierung auch gleich von MySQL vornehmen lassen:

SQL:
SELECT id, title 
FROM list_entrys 
WHERE id IN ($liste) 
ORDER BY FIND_IN_SET(id, '$liste') ASC

Edit: Ach Sry zu spät gesehen das du die Doppelten behalten willst.
 
Zuletzt bearbeitet von einem Moderator:
Zurück