0

フレームワークとして codeigniter を使用していますが、アクティブ レコードを使用していません。このクエリの実行に問題があり、エラー番号 1064 が表示されます。

基本的に、一連のデータをテーブルに挿入しようとしていますが、他のテーブルからいくつかのID番号を照会しています

$titulo = $datos['titulo'];
    $tipo   =   $datos['tipo'];
    $autor  =   $datos['autor'];
    $autor2 =   $datos['autor2'];
    $editorial =    $datos['editorial'];
    $ano        =   $datos['ano'];
    $paginas    =   $datos['paginas'];
    $descripcion =  $datos['descripcion'];
    $image_path =   'hola';
    $genero     =   $datos['genero'];
    $genero2    =   $datos['genero2'];


    $sql = "INSERT INTO productos (titulo, autor_id, autor2_id, editorial_id, ano, paginas, genero_id,
             genero2_id, tipo, descripcion, image_path)
             SELECT ? AS titulo,
             id FROM autores WHERE nombre_autor=?,
             id FROM autores WHERE nombre_autor=?,
             id FROM editoriales WHERE nombre_editorial=?,
             ? as ano, 
             ? as paginas,
             id FROM generos WHERE nombre_genero=?,
             id FROM generos WHERE nombre_genero=?,
             ? as tipo,
             ? as descripcion,
             ? as image_path";

    if($this->db->query($sql, array($titulo, $autor, $autor2, $editorial, $ano, $paginas, $genero, $genero2, $tipo, $descripcion, $image_path))){
        return true;
    }else{
        return false;
    }  

誰かがこのクエリで私を助けることができますか?

ありがとう...

4

2 に答える 2

0

データベースの設計がわからないので、これは完璧なクエリではありませんが、構文に関する限り正しい方向に導くはずです。

INSERT INTO productos (titulo, autor_id, autor2_id, editorial_id, ano, paginas, genero_id,
         genero2_id, tipo, descripcion, image_path)
SELECT a.titulo, b.id, b.id2, c.id, a.ano, a.paginas, d.id, d.id2, a.tipo, a.description, a.image_path
FROM table_1 a
JOIN table_2 b ON a.autor_id = b.id
JOIN table_3 c ON a.editorial_id = c.id
JOIN table_4 d ON a.genero_id = d.id
WHERE a.id = 25

基本的に、これにより、「productos」に追加する前に、必要なすべてのデータが 1 つのテーブルに結合されます。これは、SQL で必要なことを行う適切な方法です。もちろん、これはテーブル間の関係にも依存します。この例では、table_1 に他のテーブルのデータを参照する外部キーがあると想定しています。

その後、必要なパラメーターに基づいてこのクエリを実行できます。WHERE 句でパラメーターを参照するだけです。

于 2013-03-12T21:46:59.917 に答える
0

select ステートメントには FROM 句を 1 つだけ含めることができます。

http://dev.mysql.com/doc/refman/5.0/en/select.html

JOINの使用を検討する

http://dev.mysql.com/doc/refman/5.0/en/join.html

于 2013-03-12T21:18:50.460 に答える