Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    select per due tabelle con nomi campi uguali

    Ciao, ho una domanda per il forum.
    Sto creando un piccolo blog, fino a qui nulla di strano, ma ho un problema.
    Ho creato in MySQL una serie di tabelle che contengono i dati, in una chiamata 'pagina' c'è un ID che identifica la pagina di riferimento, è il classico id auto incrementato e primario, ogni pagina ha il suo record e ogni record ha un campo ID, fin qui nulla di nuovo sotto il sole
    Poi c'è una tabella chiamata footer, che identifica le informazioni da inserire nel footer di ogni pagina; questa ha un suo campo ID auto incrementante e primario, un campo chiamato pagina_id che fa riferimento alla pagina di cui il footer è debitore, insomma nulla di particolare anche qui.
    Il problema però mi si crea quando voglio estrarre l'ID della prima tabella, cioè della tabella chiamata 'pagina'.

    la mia query è la seguente:
    Codice PHP:
    $querySQL 'SELECT p.id, p.nome, p.visibile, p.creata, p.titolo_pagina, p.titolo_header, p.occhiello_header, ';
    $querySQL .= 'f.id, f.pagina_id, f.footer_title, f.footer_paragrafo ';
    $querySQL .= 'FROM pagina as p, footer as f WHERE p.nome = :nome LIMIT 1 '
    L'estrazione dei dati ( usando PDO ) avviene con un $campi = $sth->fetch(PDO::FETCH_ASSOC); e campi mi da l'elenco dei campi delle due tabelle.
    Ma se faccio un var_dump($campi) non ho una differenziazione per i campi dell'una o dell'altra tabella, cioè l'ID della prima tabella lo perdo perché viene sovrascritto nell'array da quello della seconda tabella.
    Non voglio fare due query separate, non vorrei dover modificare i nomi dei due campi id in modo da farli diventare diversi ( so troppo metodico lo so, me lo dice pure lo psichiatra ) a parte gli scherzi, idee al riguardo?

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ti manca la relazione tra le due tabelle : p.id = f.pagina_id and p.nome = etc...
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Ma cosí com'é funziona benissimo solo non riesco a estrapolare l'id della prima tabella. Non mi andava di usare join o union

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ribadisco. Ti manca la relazione tra le tabelle. Poi fai come vuoi.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Prova
    codice:
    SELECT p.id AS p_id, [...]
    PS: Se il nome di un campo è univoco all'interno delle tabelle coinvolte nella query, puoi evitare di specificare la tabella per ogni campo: "p." e "f." sono necessari solo davanti a "id" perché si ripete, mentre davanti a tutti gli altri campi è superfluo.
    Ultima modifica di ZioLuffio; 02-10-2014 a 19:15

  6. #6
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Che sia superfluo o meno non cambia nulla, p.id e f.id ci sono già, ma quando chiedi la fetch i campi con nume uguale vengono sovrascritti è normale che accada.
    La query che ho fatto in pratica è già una inner join implicita, comunque ho risolto nell'unico modo logico a prescindere da quante query e in che modo posso fare, cioè, rinominare i campi in modo che siano univoci, cosa che tra l'altro è alla base della programmazione: non commettere l'errore di creare imprecisioni, sii preciso e logico.

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non è una inner join implicita è un prodotto cartesiano. Ti prende il record che vuoi nella tabella pagina ma ti prende il primo record nell'altra. Se non avessi messo limit 1 te ne accorgeresti.

    Dico questo ma non dico nulla.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Quote Originariamente inviata da Marcolino's Visualizza il messaggio
    ho risolto nell'unico modo logico a prescindere da quante query e in che modo posso fare, cioè, rinominare i campi in modo che siano univoci, cosa che tra l'altro è alla base della programmazione: non commettere l'errore di creare imprecisioni, sii preciso e logico.
    Auguri....
    Il modo era molto più semplice e banale, bastava usare un alias per uno dei campi con nome uguale.
    E comunque quella query è sbagliata, te l'hanno già detto. Non c'è nessuna join, né esplicita né implicita. E non è che si usano quando si ha voglia, a proposito di essere preciso e logico.

  9. #9
    Quote Originariamente inviata da Marcolino's Visualizza il messaggio
    [...]cosa che tra l'altro è alla base della programmazione: non commettere l'errore di creare imprecisioni, sii preciso e logico.
    La base della programmazione in verità è capire cosa un determinato linguaggio può fare e in che modo puoi trovare la soluzione ai tuoi problemi nella maniera più facile e indolore (ci sarebbero basi più profonde a partire da cos'è un algoritmo, ma mi fermerò qui). Se vuoi incasinarti la vita con soluzioni tue che non siano per niente ad hoc non venire a chiedere consigli nel forum (visto che poi li ignori completamente).

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 © 2026 vBulletin Solutions, Inc. All rights reserved.