• User

    OK, Ultima si deve rileggere la richiesta....


  • Moderatore

    Ma ragazzi, a me sembre piu semplice di quello che è. Io non dico che le vostre soluzioni siano sbagliate, al contrario, sto semplicemente dicendo che forse la richiesta è piu semplice di quello che si pensa.
    Purtroppo lui non specifica se vuole una singola foto o un elenco di ultime foto estratte per articolo. No? La richiesta mi sembra ovvia. Estrarre l'ultima foto per singolo articolo.
    O, magari mi sbaglio, lo scopriremo solo quando si deciderà a rispondere al post


  • User Attivo

    Forse è come dici tu, Ultima. Ma io sono abituato a basarmi su quel che vedo scritto e non su mie supposizioni. Al momento quel che vedo scritto è che lui vuole un elenco delle ultime foto estratte per articolo. Anche a me la richiesta sembra ovvia, tanto ovvia che è scritta.
    Può essere che enricocarli si sia espresso male e voglia quel che dici tu, ma se rimaniamo ai fatti la richiesta è di un elenco.


  • Moderatore

    Ma non c'è scritto da nessuna parte che vuole un elenco. Altrimenti tutta sta polemica è inutile ovvio


  • User

    il risultato dovrebbe essere:

    13 tavolara_personaggi-vari_40-pupazzi_colezione-tilo... 8
    20 0000000903-piatto.jpg 9

    aspettiamo il responso.... sempre se arriva...


  • User Attivo

    Mamma mia, cheddire... grazie 1000 per le numerose risposte; non credevo di riceverne così tante. Grazie davvero! Complimenti davvero per il forum, è un qualcosa di veramente grande e importante.
    Scusate se non sono tempestivo nelle risposte, è che in questo periodo non ho tempo, tra lavoro, tra un po' mi sposo :D, casa ed altri impegni veramente faccio fatica a rispondere;

    cmq: forse sono stato un po' frettoloso nella richiesta; in verità ho bisogno di qualcosa di più complesso, vediamo se riesco a spiegarmi:

    ho 2 tabelle:

    ** ARTICOLI**

    [TABLE="class: grid"]

    [TD]**id
    **[/TD]
    [TD]**categoria_id
    **[/TD]
    [TD]**title
    **[/TD]
    [TD]**description
    **[/TD]
    [TD]**keywords
    **[/TD]
    [TD]**data
    **[/TD]
    [TD]**h1
    **[/TD]
    [TD]**h2
    **[/TD]
    [TD]**testo
    **[/TD]
    [TD]**visibile
    **[/TD]
    [/TR]

    [TD]1
    [/TD]
    [TD]1
    [/TD]
    [TD]title 1
    [/TD]
    [TD]description 1
    [/TD]
    [TD]keywords
    [/TD]
    [TD]17 Gennaio 2015
    [/TD]
    [TD]Titolo 1
    [/TD]
    [TD]Sottotitolo 1
    [/TD]
    [TD]Testo 1
    [/TD]
    [TD]si
    [/TD]
    [/TR]

    [TD]2
    [/TD]
    [TD]5
    [/TD]
    [TD]title 2
    [/TD]
    [TD]description 2
    [/TD]
    [TD]keywords
    [/TD]
    [TD]16 Gennaio 2015
    [/TD]
    [TD]Titolo 2
    [/TD]
    [TD]Sottotitolo 2
    [/TD]
    [TD]Testo 2
    [/TD]
    [TD]no
    [/TD]
    [/TR]

    [TD]3
    [/TD]
    [TD]8
    [/TD]
    [TD]title 3
    [/TD]
    [TD]description 3
    [/TD]
    [TD]keywords[/TD]
    [TD]15 Gennaio 2015
    [/TD]
    [TD]Titolo 3
    [/TD]
    [TD]Sottotitolo 3
    [/TD]
    [TD]Testo 3
    [/TD]
    [TD]si
    [/TD]
    [/TR]

    [TD]4
    [/TD]
    [TD]6
    [/TD]
    [TD]title 4
    [/TD]
    [TD]description 4
    [/TD]
    [TD]keywords
    [/TD]
    [TD]14 Gennaio 2015
    [/TD]
    [TD]Titolo 4
    [/TD]
    [TD]Sottotitolo 4
    [/TD]
    [TD]Testo 4
    [/TD]
    [TD]si
    [/TD]
    [/TR]

    [TD]5
    [/TD]
    [TD]4
    [/TD]
    [TD]title 5
    [/TD]
    [TD]description 5
    [/TD]
    [TD]keywords
    [/TD]
    [TD]13 Gennaio 2015
    [/TD]
    [TD]Titolo 5
    [/TD]
    [TD]Sottotitolo 5
    [/TD]
    [TD]Testo 5
    [/TD]
    [TD]si
    [/TD]
    [/TR]

    [TD]6
    [/TD]
    [TD]1
    [/TD]
    [TD]title 6
    [/TD]
    [TD]description 6
    [/TD]
    [TD]keywords
    [/TD]
    [TD]12 Gennaio 2015
    [/TD]
    [TD]Titolo 6
    [/TD]
    [TD]Sottotitolo 6
    [/TD]
    [TD]Testo 6
    [/TD]
    [TD]no
    [/TD]
    [/TR]

    [TD]7
    [/TD]
    [TD]2
    [/TD]
    [TD]title 7
    [/TD]
    [TD]description 7
    [/TD]
    [TD]keywords
    [/TD]
    [TD]11 Gennaio 2015
    [/TD]
    [TD]Titolo 7
    [/TD]
    [TD]Sottotitolo 7
    [/TD]
    [TD]Testo 7
    [/TD]
    [TD]si
    [/TD]
    [/TR]

    [TD]8
    [/TD]
    [TD]3
    [/TD]
    [TD]title 8
    [/TD]
    [TD]description 8
    [/TD]
    [TD]keywords
    [/TD]
    [TD]10 Gennaio 2015
    [/TD]
    [TD]Titolo 8
    [/TD]
    [TD]Sottotitolo 8
    [/TD]
    [TD]Testo 8
    [/TD]
    [TD]no
    [/TD]
    [/TR]

    [TD]9
    [/TD]
    [TD]2
    [/TD]
    [TD]title 9
    [/TD]
    [TD]description 9
    [/TD]
    [TD]keywords
    [/TD]
    [TD]9 Gennaio 2015
    [/TD]
    [TD]Titolo 9
    [/TD]
    [TD]Sottotitolo 9
    [/TD]
    [TD]Testo 9
    [/TD]
    [TD]si
    [/TD]
    [/TR]

    [TD]10
    [/TD]
    [TD]4
    [/TD]
    [TD]title 10
    [/TD]
    [TD]description 10
    [/TD]
    [TD]keywords
    [/TD]
    [TD]8 Gennaio 2015
    [/TD]
    [TD]Titolo 10
    [/TD]
    [TD]Sottotitolo 10
    [/TD]
    [TD]Testo 10
    [/TD]
    [TD]si
    [/TD]
    [/TR]
    [/TABLE]

    FOTO

    [TABLE="class: grid"]

    [TD]**id
    **[/TD]
    [TD]**foto
    **[/TD]
    [TD]**id_articolo
    **[/TD]
    [/TR]

    [TD]1
    [/TD]
    [TD]foto1.jpg
    [/TD]
    [TD]1
    [/TD]
    [/TR]

    [TD]2
    [/TD]
    [TD]foto2.jpg
    [/TD]
    [TD]5
    [/TD]
    [/TR]

    [TD]3
    [/TD]
    [TD]foto3.jpg
    [/TD]
    [TD]5
    [/TD]
    [/TR]

    [TD]4
    [/TD]
    [TD]foto4.jpg
    [/TD]
    [TD]7
    [/TD]
    [/TR]

    [TD]5
    [/TD]
    [TD]foto5.jpg
    [/TD]
    [TD]10
    [/TD]
    [/TR]

    [TD]6
    [/TD]
    [TD]foto6.jpg
    [/TD]
    [TD]1
    [/TD]
    [/TR]

    [TD]7
    [/TD]
    [TD]foto7.jpg
    [/TD]
    [TD]4
    [/TD]
    [/TR]

    [TD]8
    [/TD]
    [TD]foto8.jpg
    [/TD]
    [TD]7
    [/TD]
    [/TR]

    [TD]9
    [/TD]
    [TD]foto9.jpg
    [/TD]
    [TD]4
    [/TD]
    [/TR]

    [TD]10
    [/TD]
    [TD]foto10.jpg
    [/TD]
    [TD]1
    [/TD]
    [/TR]

    [TD]11
    [/TD]
    [TD]foto11.jpg
    [/TD]
    [TD]4
    [/TD]
    [/TR]

    [TD]12
    [/TD]
    [TD]foto12.jpg
    [/TD]
    [TD]5
    [/TD]
    [/TR]

    [TD]13
    [/TD]
    [TD]foto13.jpg
    [/TD]
    [TD]7
    [/TD]
    [/TR]

    [TD]14
    [/TD]
    [TD]foto14.jpg
    [/TD]
    [TD]4
    [/TD]
    [/TR]

    [TD]15
    [/TD]
    [TD]foto15.jpg
    [/TD]
    [TD]3
    [/TD]
    [/TR]

    [TD]16
    [/TD]
    [TD]foto16.jpg
    [/TD]
    [TD]2
    [/TD]
    [/TR]

    [TD]17
    [/TD]
    [TD]foto17.jpg
    [/TD]
    [TD]3
    [/TD]
    [/TR]

    [TD]18
    [/TD]
    [TD]foto18.jpg
    [/TD]
    [TD]2
    [/TD]
    [/TR]

    [TD]19
    [/TD]
    [TD]foto19.jpg
    [/TD]
    [TD]6
    [/TD]
    [/TR]

    [TD]20
    [/TD]
    [TD]foto20.jpg
    [/TD]
    [TD]3
    [/TD]
    [/TR]

    [TD]21
    [/TD]
    [TD]foto21.jpg
    [/TD]
    [TD]2
    [/TD]
    [/TR]

    [TD]22
    [/TD]
    [TD]foto22.jpg
    [/TD]
    [TD]8
    [/TD]
    [/TR]

    [TD]23
    [/TD]
    [TD]foto23.jpg
    [/TD]
    [TD]9
    [/TD]
    [/TR]

    [TD]24
    [/TD]
    [TD]foto24.jpg
    [/TD]
    [TD]8
    [/TD]
    [/TR]

    [TD]25
    [/TD]
    [TD]foto25.jpg
    [/TD]
    [TD]6
    [/TD]
    [/TR]

    [TD]26
    [/TD]
    [TD]foto26.jpg
    [/TD]
    [TD]9
    [/TD]
    [/TR]

    [TD]27
    [/TD]
    [TD]foto27.jpg
    [/TD]
    [TD]8
    [/TD]
    [/TR]

    [TD]28
    [/TD]
    [TD]foto28.jpg
    [/TD]
    [TD]10
    [/TD]
    [/TR]

    [TD]29
    [/TD]
    [TD]foto29.jpg
    [/TD]
    [TD]9
    [/TD]
    [/TR]

    [TD]30
    [/TD]
    [TD]foto30.jpg
    [/TD]
    [TD]6
    [/TD]
    [/TR]
    [/TABLE]

    Vorrei Estrarre da queste 2 tabelle h1, h2 e una foto degli ultimi 3 articoli con visibile = si ordinati per data, la foto deve essere l'ultima inserita (con id più alto).

    Il risultato deve essere:

    [TABLE="class: grid"]

    [TD]id
    [/TD]
    [TD]categoria_id
    [/TD]
    [TD]title
    [/TD]
    [TD]description
    [/TD]
    [TD]keywords
    [/TD]
    [TD]data
    [/TD]
    [TD]h1
    [/TD]
    [TD]h2
    [/TD]
    [TD]testo
    [/TD]
    [TD]visibile
    [/TD]
    [TD]id
    [/TD]
    [TD]foto
    [/TD]
    [TD]id_articolo
    [/TD]
    [/TR]

    [TD]1
    [/TD]
    [TD]1
    [/TD]
    [TD]Title 1
    [/TD]
    [TD]Description 1
    [/TD]
    [TD]Keywords 1
    [/TD]
    [TD]17 Gennaio 2015
    [/TD]
    [TD]Titolo 1
    [/TD]
    [TD]Sottotitolo 1
    [/TD]
    [TD]Testo 1
    [/TD]
    [TD]si
    [/TD]
    [TD]10
    [/TD]
    [TD]foto10.jpg
    [/TD]
    [TD]1
    [/TD]
    [/TR]

    [TD]3
    [/TD]
    [TD]8
    [/TD]
    [TD]Title 3
    [/TD]
    [TD]Description 3
    [/TD]
    [TD]Keywords 3
    [/TD]
    [TD]15 Gennaio 2015
    [/TD]
    [TD]Titolo 3
    [/TD]
    [TD]Sottotitolo 3
    [/TD]
    [TD]Testo 3
    [/TD]
    [TD]si
    [/TD]
    [TD]20
    [/TD]
    [TD]foto20.jpg
    [/TD]
    [TD]3
    [/TD]
    [/TR]

    [TD]4
    [/TD]
    [TD]6
    [/TD]
    [TD]Title 4
    [/TD]
    [TD]Description 4
    [/TD]
    [TD]Keywords 4
    [/TD]
    [TD]14 Gennaio 2015
    [/TD]
    [TD]Titolo 4
    [/TD]
    [TD]Sottotitolo 4
    [/TD]
    [TD]Testo 4
    [/TD]
    [TD]si
    [/TD]
    [TD]14
    [/TD]
    [TD]foto14.jpg
    [/TD]
    [TD]4
    [/TD]
    [/TR]
    [/TABLE]

    Grazie 1000 per la disponibilità e la pazienza
    Buon week end a tutti


  • User Attivo

    Quindi abbiamo appurato che è un elenco... se però prima era poco chiaro, ora è anche peggio.

    (ps. Auguri per il matrimonio... :frust:<- ... tu. )


  • User Attivo

    :D:D:D:D:D

    Grazie mille oslino!

    Pensavo di essere stato chiaro e invece no... porta pazienza.

    Dunque ci provo ancora:

    Mi servono gli ultimi 3 articoli in ordine cronologico dal più recente con visibile = si

    per cui:

    [TABLE="class: grid"]

    [TD]**id
    **[/TD]
    [TD]**categoria_id
    **[/TD]
    [TD]**title
    **[/TD]
    [TD]**description
    **[/TD]
    [TD]**keywords
    **[/TD]
    [TD]**data
    **[/TD]
    [TD]**h1
    **[/TD]
    [TD]**h2
    **[/TD]
    [TD]**testo
    **[/TD]
    [TD]**visibile
    **[/TD]
    [/TR]

    [TD]1[/TD]
    [TD]1[/TD]
    [TD]title 1[/TD]
    [TD]description 1[/TD]
    [TD]keywords[/TD]
    [TD]17 Gennaio 2015[/TD]
    [TD]Titolo 1[/TD]
    [TD]Sottotitolo 1[/TD]
    [TD]Testo 1[/TD]
    [TD]si[/TD]
    [/TR]

    [TD]3
    [/TD]
    [TD]8[/TD]
    [TD]title 3[/TD]
    [TD]description 3[/TD]
    [TD]keywords[/TD]
    [TD]15 Gennaio 2015[/TD]
    [TD]Titolo 3[/TD]
    [TD]Sottotitolo 3[/TD]
    [TD]Testo 3[/TD]
    [TD]si[/TD]
    [/TR]

    [TD]4
    [/TD]
    [TD]6[/TD]
    [TD]title 4[/TD]
    [TD]description 4[/TD]
    [TD]keywords[/TD]
    [TD]14 Gennaio 2015[/TD]
    [TD]Titolo 4[/TD]
    [TD]Sottotitolo 4[/TD]
    [TD]Testo 4[/TD]
    [TD]si[/TD]
    [/TR]
    [/TABLE]

    per ognuno di questi articoli mi serve l'ultima foto inserita, quella con l'id più alto

    per cui:

    [TABLE="class: grid"]

    [TD]**id
    **[/TD]
    [TD]**foto
    **[/TD]
    [TD]**id_articolo
    **[/TD]
    [/TR]

    [TD]10
    [/TD]
    [TD]foto10.jpg[/TD]
    [TD]1[/TD]
    [/TR]

    [TD]14
    [/TD]
    [TD]foto14.jpg[/TD]
    [TD]4[/TD]
    [/TR]

    [TD]20
    [/TD]
    [TD]foto20.jpg[/TD]
    [TD]3[/TD]
    [/TR]
    [/TABLE]

    poi combinare queste 2 tabelle, io necessito soltanto di h1, h2 e foto

    per cui:

    [TABLE="class: grid"]

    [TD]h1
    [/TD]
    [TD]h2
    [/TD]
    [TD]foto
    [/TD]
    [/TR]

    [TD]Titolo 1
    [/TD]
    [TD]Sottotitolo 1
    [/TD]
    [TD]foto10.jpg
    [/TD]
    [/TR]

    [TD]Titolo 3
    [/TD]
    [TD]Sottotitolo 3
    [/TD]
    [TD]foto20.jpg
    [/TD]
    [/TR]

    [TD]Titolo 4
    [/TD]
    [TD]Sottotitolo 4
    [/TD]
    [TD]foto14.jpg
    [/TD]
    [/TR]
    [/TABLE]

    spero di essere stato più chiaro
    ringrazio in anticipo tutti

    ciao!


  • User Attivo

    La butto lì...

    SELECT h1, h2, foto FROM articoli, foto WHERE articoli.visibile ="si" AND articoli.id = foto.id_articolo DESC LIMIT 3
    

  • User Attivo

    Ho ricostruito le tue tabelle.
    [PHP]<?php
    require_once'connect.php';
    $query = "SELECT DISTINCT foto.id_articolo FROM foto, articoli WHERE articoli.visibile ='si' ORDER BY foto.id_articolo DESC LIMIT 3";
    $a = $mysqli_query($conn, $query);
    $c = mysqli_num_rows($a);
    while($r = mysqli_fetch_array($a)){
    $array[] = $r[0];
    }
    echo '<pre>'; // DEBUG
    var_dump($array); // DEBUG
    echo '</pre>'; // DEBUG
    for($i=0; $i < $c; $i++){
    $query2 = "SELECT foto.foto, articoli.h1, articoli.h2 FROM foto, articoli WHERE foto.id_articolo = '$array*' AND articoli.id = '$array*' ORDER BY foto.id DESC LIMIT 1";
    echo $query2 . '<br />'; // DEBUG
    $result = $mysqli_query($conn, $query2);
    while($row = mysqli_fetch_array($result)){
    echo $row['foto'] . ' ' . 'ciclo while ' . $i . '<br />';
    echo $row['h1'] . ' ' . $row['h2'] . '<br />';
    }
    echo 'ciclo for ' . $i . '<br />'; // DEBUG
    }
    ?>[/PHP]
    Funziona.
    Mi devi una pizza.
    Ciao.


  • User Attivo

    Grande Oslino!

    appena ho tempo provo!

    se capiti a vicenza volentieri per la pizza!

    grazie ancora!

    :D:D:D:D:D:D:D:D:D:D


  • User Attivo

    Fammi sapere se va.
    E non fare il furbo, la pizza me la devi anche se passi tu a Rimini! :festa:

    EDIT:
    uhmmm... riguardando il mio codice ho il dubbio che non vada come dovrebbe... ci devo lavorare sopra... non posso perdermi una pizza gratis!!!


  • User Attivo

    Prova con questo. E' abbastanza contorto e forse si poteva fare di meglio con qualche trucco da guru SQL.
    Però se funziona aggiungi una birra... media... bionda. E dessert.
    Grazie.
    [PHP]
    <?php
    require_once'connect.php';
    // recupero i singoli id_articolo delle foto
    $query = "SELECT DISTINCT foto.id_articolo FROM foto ORDER BY id_articolo DESC";
    $a = mysqli_query($conn, $query);
    // metto ogni id_articolo in un array
    while($r = mysqli_fetch_array($a)){
    $array[] = $r[0];
    }
    echo '<pre>'; // DEBUG (eliminare)
    var_dump($array); // DEBUG (eliminare)
    echo '</pre>'; // DEBUG (eliminare)
    $x = 0;
    $i = 0;

    while($i <= count($array)-1){ // faccio un ciclo su tutti i valori dell'array. Il ciclo si ferma all'esaurimento dell'array o al recupero di 3 articoli (riga 29)...

    $query2 = "SELECT foto.foto, h1, h2 FROM foto, articoli WHERE foto.id_articolo = '$array*' AND articoli.id = '$array*' AND articoli.visibile = 'si' ORDER BY foto.id DESC LIMIT 1";
    echo $query2 . '<br />'; // DEBUG (eliminare)
    $result = mysqli_query($conn, $query2);
    $i++; // passo al valore successivo dell'array
    if(mysqli_num_rows($result) == 0) continue;  // se con l'id_articolo non c'è un articolo "visibile" riprendo il ciclo da capo altrimenti proseguo...
    $x++; //... inserendo il primo articolo e aumentando il contatore
    while($row = mysqli_fetch_array($result)){
        echo "<h1>Articolo $x </h1>"; // DEBUG (eliminare)
        echo $row['foto'] . '<br />';
        echo $row['h1'] . ' ' . $row['h2'] . '<br />';
    }
    if($x == 3) break; // quando il contatore degli articoli recuperati arriva a 3 mi fermo
    

    }

    ?>
    [/PHP]
    Ricordati di mettere i vari die() e controlli di errore.
    Ciao.


  • User

    Ci provo anch'io... c'è in ballo una pizza...:fumato:
    Provata e funzionante,
    per Mysql:

    SELECT * FROM (
    SELECT A2.* FROM 
    (SELECT ID
    FROM ARTICOLI
    WHERE ARTICOLI.visibile="si"
    ORDER BY DATA DESC LIMIT 3) A1, ARTICOLI A2 WHERE A1.ID=A2.ID
    ) A LEFT JOIN (
    SELECT B2.* FROM
    (SELECT id_articolo, MAX(id) AS MAX_ID
    FROM FOTO
    GROUP BY ID_ARTICOLO) B1, FOTO B2
    WHERE B1.MAX_ID=B2.ID
    ) B WHERE A.ID=B.ID_ARTICOLO
    
    

    per MsAccess:

    SELECT * FROM (
    SELECT A2.* FROM 
    (SELECT TOP 3 ID
    FROM ARTICOLI
    WHERE ARTICOLI.visibile="si"
    ORDER BY DATA DESC) A1, ARTICOLI A2 WHERE A1.ID=A2.ID
    ) A LEFT JOIN (
    SELECT B2.* FROM
    (SELECT id_articolo, MAX(id) AS MAX_ID
    FROM FOTO
    GROUP BY ID_ARTICOLO) B1, FOTO B2
    WHERE B1.MAX_ID=B2.ID
    ) B WHERE A.ID=B.ID_ARTICOLO
    
    

    Ciao e alla prossima


  • User Attivo

    Lasciamene una fetta... :gtsad:


  • User Attivo

    Ragazzi devo mettere via i soldi per la cucina, non posso pagare pizze a tutti :D:D:D:D:D

    Una domanda per OsteriaORistorante: vedo che nella query ci sono A1, A2, B1, B2

    Perdonate l'ignoranza e la domanda forse molto banale, ma che cosa sono?

    grazie ancora per le risposte
    buona giornata a tutti


  • User

    @enricocarli said:

    Ragazzi devo mettere via i soldi per la cucina, non posso pagare pizze a tutti :D:D:D:D:D

    Una domanda per OsteriaORistorante: vedo che nella query ci sono A1, A2, B1, B2

    Perdonate l'ignoranza e la domanda forse molto banale, ma che cosa sono?

    grazie ancora per le risposte
    buona giornata a tutti

    Ciao Enrico,
    A1, A2, B1, B2 sono gli alias delle tabelle o delle query, cerca "sql alias" su google

    Michele


  • User Attivo

    annn ho capito...

    però mi da errore sul phpmyadmin:

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE A.ID=B.ID_ARTICOLO' at line 13

    forse è la mia versione di php?

    bho!


  • User Attivo

    Cmq sia...

    ho quasi risolto; ho scritto:

    SELECT * FROM articoli LEFT OUTER JOIN foto ON articoli.id=foto.id_articolo WHERE visibile = 'si' GROUP BY id_articolo ORDER BY data DESC LIMIT 0, 3;

    l'unico problema è che non mi prende l'ultima foto, bensì la prima...

    Il GROUP BY tiene buono il primo risultato, gli altri li esclude, che voi sappiate c'è il sistema per farlo funzionare al contrario?

    grazie infinite a tutti
    siete gentilissimi
    buona serata


  • User

    CORRETTO:

    Ci provo anch'io... c'è in ballo una pizza...
    Provata e funzionante,
    per Mysql:

    
    SELECT * FROM (
    SELECT A2.* FROM 
    (SELECT ID
    FROM ARTICOLI
    WHERE ARTICOLI.visibile="si"
    ORDER BY DATA DESC LIMIT 3) A1, ARTICOLI A2 WHERE A1.ID=A2.ID
    ) A LEFT JOIN (
    SELECT B2.* FROM
    (SELECT id_articolo, MAX(id) AS MAX_ID
    FROM FOTO
    GROUP BY ID_ARTICOLO) B1, FOTO B2
    WHERE B1.MAX_ID=B2.ID
    ) B ON A.ID=B.ID_ARTICOLO
    
    

    per MsAccess:

    
    SELECT * FROM (
    SELECT A2.* FROM 
    (SELECT TOP 3 ID
    FROM ARTICOLI
    WHERE ARTICOLI.visibile="si"
    ORDER BY DATA DESC) A1, ARTICOLI A2 WHERE A1.ID=A2.ID
    ) A LEFT JOIN (
    SELECT B2.* FROM
    (SELECT id_articolo, MAX(id) AS MAX_ID
    FROM FOTO
    GROUP BY ID_ARTICOLO) B1, FOTO B2
    WHERE B1.MAX_ID=B2.ID
    ) B ON A.ID=B.ID_ARTICOLO
    
    

    Ciao e alla prossima