mmh Dubbio su query

Ciao ho una query con tre join dove uno mi dovrebbe estrarre tutti i record di una tabella con anid = n

solo che in questa seconda tabella ci possono essere anche più di 1 record, devo procedere con una seconda query del tipo

select label from tabella where anid=n

o posso estrarli tutti attraverso il join che faccio nella prima query?

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

non è molto chiaro... posta la struttura delle tabelle e dicci cosa vuoi estrarre

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

allora

CREATE TABLE  `announces` (
  `anid` int(10) unsigned NOT NULL auto_increment,
  `usid` int(10) unsigned NOT NULL default '1',
  `loid` int(10) unsigned NOT NULL,
  `genid` int(10) unsigned NOT NULL,
  `prid` int(10) unsigned NOT NULL,
  `available` enum('1','0') NOT NULL default '0',
  `active` enum('1','0') NOT NULL default '0',
  `votes` int(10) unsigned NOT NULL default '0',
  `title` varchar(45) NOT NULL,
  `description_ita` text,
  `insertdate` int(10) unsigned NOT NULL default '0',
  `description_eng` text NOT NULL,
  PRIMARY KEY  (`anid`),
  FULLTEXT KEY `description_eng` (`description_eng`),
  FULLTEXT KEY `description_ita` (`description_ita`),
) ;
CREATE TABLE `prices` (
  `prid` int(10) unsigned NOT NULL auto_increment,
  `anid` int(10) unsigned NOT NULL,
  `label` varchar(64) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  PRIMARY KEY  (`prid`)
);
CREATE TABLE  `images` (
  `imid` int(10) unsigned NOT NULL auto_increment,
  `data` blob NOT NULL,
  `mime` varchar(64) NOT NULL,
  `name` varchar(80) NOT NULL,
  `anid` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`imid`)
)

in pratica con una query estraggo e collego la località ed il genere all'annuncio, ma se cercavo di prendere tutti i record con id ( anid ) = n da images e prices ottenevo solo un risultato, per questo credo di dover utilizzare query separate per estrarre dati dell'annuncio e delle immagini ( e prezzi )

la query che uso ora è :

      $query = "SELECT `l`.`label` `location`,`g`.`label_".$this->lang['langName']."` `genre`,"
            ."`a`.`anid`,`a`.`genid`,`a`.`loid`,`title`,`description_".$this->lang['langName']."` `description`"
            ."FROM `sm_announces` `a` JOIN `sm_genres` `g` ON `a`.`genid`=`g`.`genid` JOIN `sm_locations` `l` "
            ."ON `a`.`loid`=`l`.`locid` WHERE `a`.`anid`=".$id." LIMIT 1";

ho eliminato il JOIN con la tabella prices ed images visto che ottenevo un solo risultato e non tutti come mi sarei ( ingenuamente ) aspettato  ;D

quindi ora sto procedendo ad usare una query separata per estrarre le immagini ed i prezzi dell'annuncio.

 :bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

riporta la query con il JOIN che non ti funzionava

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

era la stessa solo aggiunto questo

SELECT p.label, price ... <- campi aggiuntivi che mi servono della tabella prices

FROM sm_announces a

JOIN sm_prices p ON a.anid=p.anid ... <- dove l'id dell'annuncio è l'id dell'annuncio contenuti in prices

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Ho visto che hai messo un LIMIT 1 alla query, come mai visto che vuoi più risultati?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

lol !?

oramai lo metto senza accorgermene lo uso come l'autosave ( cioè CTRL+S , ormai viene automatico ogni 20/30 secondi LOOOL)

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

perfetto la query senza limit ha funzionato :

SELECT `p`.`label` `time`, `price`,`l`.`label` `location`,`g`.`label_ita` `genre`,`a`.`anid`,`a`.`genid`,`a`.`loid`,`title`,`description_ita` `description` FROM `sm_announces` `a` JOIN `sm_genres` `g` ON `a`.`genid`=`g`.`genid` JOIN `sm_locations` `l` ON `a`.`loid`=`l`.`locid`JOIN `sm_prices` `p` ON `p`.`anid`=`a`.`anid` JOIN `sm_images` `i`WHERE `a`.`anid`=1

ma non sarà pesante come risultato?

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

no, stai tranquillo.  :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Gianni così se l'annuncio non ha prezzi, impossibile, visto che sono obbligatori, non viene visualizzato,non fa nulla....ma è pur sempre una limitazione!

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
modificato 9 anni fa
X 0 X

sostituisci il JOIN con una LEFT JOIN

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda