Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Query con variabili annidate

    Spero che il titolo vada bene.

    Ho un problema a realizzare una query.

    Mi serve per realizzare un album fotografico.

    Nella prima tabella ho un elenco di categorie.
    Nome e parente.

    In pratica serve per creare una categoria e delle sottocategorie.

    Diciamo

    Footografie
    -Auto
    - - Fiat
    - - Bmw
    - - Renault
    -Moto
    - - Honda
    - - Aprilia
    - - Ducati


    Nella seconda ho l'elenco di tutte le foto con le loro specifiche, e la categoria a cui appartengono. Non c'è il riferimento alla categoria padre.

    Ora, se volessi estrarre tutte le foto appartenenti alla categoria Fotografie, oppure alla categoria Auto, come posso impostare la query?

    Perche se voglio estrarre quelle di Fiat, è una query semplice. Ma se non associo nulla alla categoria Auto, logicamente con la query semplice cioè ... WHERE category='Auto' non mi estrae nulla.

    Non saprei proprio.. o almeno ora non mi viene... come creare il legame.

    Grazie ragazzi

  2. #2
    dunque, due domande prima di rispondere:

    1- Ma sei sicuro che ci sia solo UN livello di parentela (ciè che nella categoria Auto non ci saranno Fiat, Mercedes e così via, che poi conterranno foto)?
    2- Puoi postare la struttura del DB? E' un po' complicato senza sapere che tipo di campi sono quelli che hai messo...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    2,008
    non ho capito bene io devo estrarre le foto relative ad una categoria ma nella tabella dove sono le foto ogni foto è associata alla sua categoria?

  4. #4
    @ artorius

    no, i livelli di parentela possono essere multipli

    nel senso che nella cat. AUto ci possono essere foto, e nelle Categorie sottostanti anche.

    sono tutti campi varchar64
    la struttura delle due tabelle:

    TABLE category (
    id int(6) NOT NULL auto_increment,
    `name` varchar(64) NOT NULL default '',
    `type` varchar(64) NOT NULL default '',
    parent varchar(64) NOT NULL default '',
    lft int(6) NOT NULL default '0',
    rgt int(6) NOT NULL default '0',
    title varchar(255) NOT NULL default '',
    PRIMARY KEY (id)
    )

    TABLE image (
    id int(11) NOT NULL auto_increment,
    `name` varchar(255) NOT NULL default '',
    category varchar(255) NOT NULL default '',
    ext varchar(20) NOT NULL default '',
    w int(8) NOT NULL default '0',
    h int(8) NOT NULL default '0',
    alt varchar(255) NOT NULL default '',
    caption text NOT NULL,
    `date` datetime NOT NULL default '0000-00-00 00:00:00',
    author varchar(255) NOT NULL default '',
    thumbnail int(2) NOT NULL default '0',
    PRIMARY KEY (id)
    )

    i collegamenti sono molti a uno tra image e category:
    image.category->category.name



    @ grandeorco

    una richiesta potrebbe essere:
    devo estrarre tutte le immagini presenti nella cartella AUTO e tutte le immagini presenti nelle sottocartelle della cartella AUTO.
    anche con due query differenti. prima una (semplice) poi l'altra (difficile).





    Offorse mi conviene fare una valutazione precedente?
    Cioè prima eseguo un
    $undercat=SELECT name FROM category WHERE parent="$cat";

    con $cat il nome della variabile (AUTO) ad esempio

    quindi eseguo tante query quante sono le sottocartelle di auto direttamente dalla tabella immagini.

    foreach($undercat as $uc){
    SELECT * FROM image WHERE category='$uc';
    }

  5. #5
    posso dire che fare due tabelle è un casino inutile:

    fai una tabella Unica:
    codice:
    CREATE TABLE `Gallery_Item` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(255) NOT NULL,
      `type` VARCHAR(255) NOT NULL,
      `mime` VARCHAR(50),
      `width` INT,
      `height` INT,
      `alt` TEXT,
      `captionTitle` TEXT NOT NULL,
      `date` DATE,
      `author` VARCHAR(255),
      `left` INT,
      `right` INT,
      `thumbnail` TINYINT,
      `id_parent` INT DEFAULT NULL,
      `tipo` ENUM('Immagine','Categoria') NOT NULL,
      PRIMARY KEY (`id`)
    )
    CHARACTER SET utf8;
    Un paio di cose:
    1. se crei dei campi con un nome, non usare solo l'iniziale di quello che conterrà (tipo w ed h) è vero che in questo caso si capisce, ma generalmente i campi devono avere una parola che li identifica in modo decisivo.
    2. Mi pareva inutile mettere 2 campi, non obbligatori, come title e caption, quindi ne ho fatto uno unico obbligatorio, captionTitle appunto, se Categoria sarà il title, altrimenti la caption.
    3. Non sapendo che andava in type ho creato un campo tipo che è un ENUM ed indica se è immagine o categoria
    4. non ho capito che dovrebbe essere Thumbnail, cosa rappresenta quel numero?

    Infine, lascia che ti dica che sono per il minor numero di query possibili.
    Se vuoi fae un albero sempre visibile ho fatto una cosa simile qualche thread indietro http://forum.html.it/forum/showthrea...readid=1270451

    Se invece vuoi fare l'albero con le voci chiuse che si aprono con JS ed una chiamata AJAX devi vedere che è una cosa un po' più difficile, ma comunque simile a quello nel thread.

  6. #6
    purtroppo non posso toccare il db
    E' quello di un cms e cosi deve restare.
    Lo script è un plugin che sto creando.

    Quindi devo rrisolvere lasciando le tabelle cosi.

    Qualche idea?


    Grazie per la dritta del albero. Lo considero una volta ottenute tutte le immagini.

  7. #7
    seriamente, chi l'ha fatto non ha nemmeno quella che si può definire una conoscenza di base dei database relazionali...

    Per evitare di fare 120000 query ti conviene caricare in una botta solo tutti i dati, o quanto meno, la maggior parte possibile.

    Per il resto devi solo printare prima le categorie con parent = null poi ricorsivamente chiami una funzione come quella nel thread che ti ho postato che controlla Prima tutte le categorie con parent = all'id della categoria passata, chiamandola funzione ricorsiva, poi tutte le immagini con categoria = al nome della categoria passata, chiamando la funzione ricorsiva.

    Spero di essere stato chiaro

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da artorius
    seriamente, chi l'ha fatto non ha nemmeno quella che si può definire una conoscenza di base dei database relazionali...
    Ci vuole un bel coraggio a dire una cosa del genere dopo la porcheria di tabella che gli hai consigliato

  9. #9
    ho dovuto inserire campi che non sapevo che facevano e non sapevo se dovevo metterli o se potevo farne a meno, scusate se non l'ho ottimizzata...
    Comunque, mi riferivo al fatto che se metti l'ID in entrambe le tabelle e poi non lo usi per altro che fare PK, allora non ha molto senso, soprattutto per categoria, visto che, per com'è impostata, il campo name dovrebbe essere UNIQUE, quindi tanto vale farla li la PK.

  10. #10
    ma non è possibile fare un Merge o qualcosa di simile tra le due tabelle legandole tramite i campi image.category e category.name?

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.