2016-07-14 4 views
0

Ich habe 2 Tabellen, "Bestellungen" und "Genliste". In der Genlist-Tabelle wurden einige generierte Informationen, id | date | order_ids (1,2,3,4 ...) generiert. Ich muss alle Bestellungen aus "Bestellungen" nach orders_ids Werteliste ab einem bestimmten Datum auswählen.Mysql SELECT aus der Liste der Werte

id | date| order_ids ---|------|-------- 1 | 00-00| 1,2,3,4 2 | 00-00| 5,6,7,8

SELECT * FROM orders 
WHERE id IN (
select order_ids from genlist 
where date ='2016-07-04' 
) 

It, arbeitet s nicht richtig, nur zurück erste Element der Liste order_ids (1,2,3,4 ...). Nur "1" Wie kann ich das schreiben?

+1

Ihre Spalte 'order_ids' Wert ist‚1,2,3,4‘? Durch Komma getrennt? – Blank

+0

Normalisieren Sie Ihr Design – Strawberry

+0

Ja, 'Order_ids' Wert durch Komma getrennt. – ratVien

Antwort

0

ich dieses Problem zu beheben.

select * from orders 
where FIND_IN_SET(id, (select group_concat(order_ids) 
from gen_list)) 

Es funktioniert gut, aber es sollte erwähnt werden, dass

Das Ergebnis auf die maximale Länge abgeschnitten wird, die durch die group_concat_max_len Systemvariable gegeben ist, die einen Standardwert von 1024. Der Wert hat kann höher gesetzt werden, obwohl die effektive maximale Länge des Rückgabewerts durch den Wert von max_allowed_packet beschränkt ist. Die Syntax, um den Wert der zur Laufzeit group_concat_max_len zu ändern, ist wie folgt, wobei val eine ganze Zahl ohne Vorzeichen ist:

SET [GLOBAL | SESSION] group_concat_max_len = val; 
0

Versuchen Sie dieses:

 
    Select *,b.desc1,b.desc2 from 
    (Select * from orders) as a 

    left join 

    (select order_ids,desc1,desc2 from genlist) as b 
    on a.order_ids = b.order_ids 
+0

Es funktioniert nicht. Triple select fällt mysql server – ratVien

+0

was meinst du? es gibt einen Fehler zurück? –