Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [MYSQL] Problema insert into select concatenate

    Salve, sono alle prese con uno script SQL. Ve lo posto e vi spiego il problema:

    codice:
    INSERT INTO  `jos_lista` (`catid`,`tipo`)
        SELECT cat.id,'categoria'
        FROM jos_categories as cat
        WHERE cat.id NOT IN (select catid FROM jos_lista),
        SELECT sec.id,'sezione'
        FROM jos_sections as sec
        WHERE sec.id NOT IN (select secid FROM jos_lista);
    codice:
    INSERT INTO  `jos_lista` (`catid`,`tipo`)
        SELECT cat.id,'categoria'
        FROM jos_categories as cat
        WHERE cat.id NOT IN (select catid FROM jos_lista);
    
    INSERT INTO  `jos_lista` (`secid`,`tipo`)
        SELECT sec.id,'sezione'
        FROM jos_sections as sec
        WHERE sec.id NOT IN (select secid FROM jos_lista);
    In pratica, come è evidente, voglio creare una tabella e popolare le sue n-ple tramite due insert che selezionano dei record da due tabelle differenti.

    Ora, il problema è che le query di popolamento non funzionano. O meglio, funziona solo la prima che viene eseguita (una volta eseguita quella per le categorie, la query di insert per le sezioni termina in modo corretto ma phpmyadmin mi dice che sono state modificate 0 righe). Viceversa se eseguo prima quella delle sezioni.

    Quale è il problema? Credo che dipenda dal NOT IN

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Togli gli apici da 'categoria' e da 'sezione'

  3. #3
    Mmmm, quello è un campo enum, il cui contenuto è statico e dipende dalla query. E infatti quando parte la prima query nel campo enum inserisce quella stringa.. è l'unica soluzione che mi è venuta in mente, altrimenti? Come faccio a riempire quel campo senza l'utilizzo di php?

    Confermo che il problema sta' nella WHERE, infatti rimuovendola la query parte... allucinante

  4. #4
    codice:
    DROP TABLE IF EXISTS `jos_lista`;
    CREATE TABLE  `jos_lista` (
    `id` INT( 5 ) NULL DEFAULT NULL AUTO_INCREMENT PRIMARY KEY ,
    `catid` INT( 5 ) NULL DEFAULT NULL ,
    `secid` INT( 5 ) NULL DEFAULT NULL ,
    `limite` INT( 5 ) NOT NULL DEFAULT  '20',
    `ordine` VARCHAR( 10 ) NULL DEFAULT NULL ,
    `testo` TEXT NULL DEFAULT NULL
    ) DEFAULT CHARSET=utf8 ;
    
    INSERT INTO  `jos_lista` (`catid`)
        SELECT cat.id
        FROM jos_categories as cat
        WHERE cat.id NOT IN (select catid FROM jos_lista WHERE catid<>NULL);
    INSERT INTO  `jos_lista` (`secid`)
        SELECT sec.id
        FROM jos_sections as sec
        WHERE sec.id NOT IN (select secid FROM jos_lista WHERE secid<>NULL);
    Ecco la soluzione! Ho tolto direttamente il campo "tipo" in quanto non serviva, dato che il tipo è determinato dal fatto che se c'è il campo secid allora è una sezione.

    Il problema era che la select (la seconda) restituiva una colonna di null.. e nn so perche ma considerava che sec.id fosse sempre all'interno dei risultati... mah

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.