2017-05-06 3 views
0

Ich habe eine Abfrage, die die richtigen Ergebnisse als eine Auswahlabfrage gibt, aber wenn ich es als eine Sicht verwenden erstellt die Ansicht aber das Durchsuchen der Ansicht gibt einen Fehler "Unterabfrage gibt mehr als 1 zurück Reihe". Die Abfrage nimmt das Feld "meta_key" in der Tabelle "my_postmeta_table" und macht daraus einen Spaltennamen für das Feld "meta_value" der aktuellen Zeile. es macht so etwas:Abfrage ok bei Auswahl, aber nicht als Ansicht

dies ist das Format auf dem Tisch:

post_id meta_key meta_value 
1  key1  val1 
1  key2  val2 
2  key1  val3 
2  key2  val4 

die SELECT-Abfrage zurückgibt resaults die wie folgt aussieht:

post_id key1 key2 
1  val1 val2 
2  val3 val4 

dies ist die Abfrage:

create or REPLACE view contacts2 as select 
    post_id pid, 
    post_date Date, 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_country" and post_id=pid) AS "Country", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_usa_states" and post_id=pid) AS "USA State", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_subject" and post_id=pid) AS "Subject", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_first_name" and post_id=pid) AS "First Name", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_last_name" and post_id=pid) AS "Last Name", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_company" and post_id=pid) AS "Company", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_position" and post_id=pid) AS "Position", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_email" and post_id=pid) AS "Email", 
    (SELECT meta_value from my_postmeta_table where meta_key="contact_message" and post_id=pid) AS "Message" 
    from my_postmeta_table, my_posts_table where my_posts_table.ID=my_postmeta_table.post_id and my_posts_table.post_type="contact" GROUP by post_id; 

so ... wenn ich das "create oder REPLACE Ansicht Kontakte2 wie" aus dem obigen Code weglassen gibt es Goo d Wiederaufnahmen.

Danke

+1

Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-y-simple- sql-query – Strawberry

+0

Versuchen Sie, allen Unterabfragen ein Limit 1 hinzuzufügen. – Shadow

+0

1. Sie sind nicht klar. Was bedeutet "gibt die richtigen Ergebnisse"? Oder "es als Sicht benutzen"? Oder "Browsing die Ansicht" oder "gutes Ergebnis"? Erklären Sie nicht nur Wörter, um zu erklären, was Sie getan haben und was Sie getan haben, sondern erläutern Sie auch die Situationen genau nach [mcve] im obigen ersten Kommentar. 2. Lesen Sie über die ordnungsgemäße Verwendung von [SELECT mit GROUP BY und MySQLs ONLY_FULL_GROUP_BY] (https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html). Verwenden Sie keine Spalte in einem SELECT außerhalb eines Aggregats, wenn sie nicht in der GROUP BY-Spalte oder nur in den GROUP BY-Spalten enthalten ist. – philipxy

Antwort

0

Wenn Sie alle Unterabfragen erwarten nur 1 Datensatz zurück, dann fügen Sie einfach limit 1 zu Ende jeder Unterabfrage. Auf diese Weise weiß mysql, dass die Unterabfragen definitiv nur 1 Datensatz zurückgeben werden.

Verwandte Themen