2016-06-09 10 views
2

Ich würde gerne Fotodaten in die Tabelle articles_photos legen und es mit Anzahl von Fotos für ausgewählte Artikel konditionieren.INSERT INTO und die Unterabfrage mit COUNT

Beide Tabellen existieren. Im Folgenden werde ich meine Abfrage

INSERT INTO articles_photos(title, 
          filename, 
          photo_order, 
          created, 
          article_id) 
     VALUES ('title', 
       'filename', 
       (SELECT COUNT(id) 
        FROM articles_photos 
       WHERE article_id = 7) + 1, 
       NOW(), 
       7) 

phpMyAdmin vorgestellt haben, sagt:

Static analysis: 

5 errors were found during analysis. 

    A comma or a closing bracket was expected (near "SELECT" at position 109) 
    Unrecognized keyword. (near "COUNT" at position 116) 
    Unexpected token. (near "(" at position 121) 
    Unexpected token. (near "id" at position 122) 
    Unexpected token. (near ")" at position 124) 

#1093 - Table 'articles_photos' is specified twice, both as a target for 'INSERT' and as a separate source for data 

Was tat ich falsch?

+0

Sie können dieselbe Tabelle nicht in einer Unterabfrage verwenden, in die Sie Daten einfügen. Der Fehler ist klar: '# 1093 - Tabelle 'articles_photos' wird zweimal angegeben, sowohl als Ziel für 'INSERT' als auch als separate Quelle für Daten ' –

+0

Sollte ich zwei separate Abfrage verwenden, erhalten Sie die Anzahl der Zeilen und dann die zweite Abfrage? Kann ich tun, was ich in einer Abfrage beschrieben habe? – Jarmark

+0

Die Antwort von JNevill ist ganz in Ordnung –

Antwort

4

Sie sind in der Nähe. Ich glaube, die folgende funktioniert:

INSERT INTO articles_photos(title, 
         filename, 
         photo_order, 
         created, 
         article_id) 
SELECT 'title', 
    'filename', 
    COUNT(id)+1, 
    now(), 
    7 
FROM articles_photos 
WHERE article_id = 7; 

Sie sollten aus derselben Tabelle der Lage sein, SELECT, auf das Sie einfügen, aber Sie können es nicht in Ihrer VALUES Liste in einer Unterabfrage tun, wie Sie in Ihrer Frage hatten . Stattdessen verschieben wir hier alle Konstanten in die SELECT Anweisung.

+1

Ich nur die Abfrage testen und Sie geben die Antwort. Ich habe nur für 38 Sekunden bei dir verloren. Und du vermisst "+ 1" beim Zählen. –

+0

Großartig! Vielen Dank! – Jarmark

+1

@MahediSabuj Es passiert mir sehr oft. Ich neige dazu, gründlicher als viele der anderen Poster hier zu sein und am Ende das Rennen oft zu verlieren. Von Zeit zu Zeit kann ich eins als erstes quietschen. Habe einfach die + 1 hinzugefügt. – JNevill