Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317

    Problema inner/left join

    Codice PHP:
    SELECT
    u
    .*, g.*, COUNT(pm.read) as num_mpo.*
    FROM
    users 
    AS u
    INNER JOIN groups 
    AS g ON u.groups g.group_id
    LEFT JOIN mp 
    AS pm ON pm.receiver_id u.user_id AND pm.read 0
    LEFT JOIN online 
    AS o ON o.nick u.user_nick
    WHERE u
    .user_id '$id' AND u.user_password '$pass' 
    il problema sta nel fatto che se l'utente ha 0 pm, non mi estrae i dati dell'utente ( che mi servono indipendentemente dal fatto che l'utente abbia 0 pm, 1 o 2... ).

    Ovviamente non mi proponete 2 query -_-

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    up

  3. #3
    considera l'orario, sto dormendo in piedi

    detto questo, l'unica cosa che può causare la "non" lettura dei dati è la inner join:
    INNER JOIN groups AS g ON u.groups = g.group_id

    le due left di certo non sono il problema

    sei sicuro che ci sia un riferimento nella tabella groups?
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    cosa intendi per riferimento?
    se io inserisco una left non cambia nulla...

    grazie

  5. #5
    mmm potresti postare la struttura delle tabelle?

    in ogni caso, ti ripeto, l'unico motivo, guardando la query, che può dare problemi e quindi non far estrarre risultati è la inner join.
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    sicuro? io quando tolto la parte dei pm, estrae correttamente tutti i dati.

    Codice PHP:
    CREATE TABLE groups(
        `
    group_idtinyint unsigned NOT NULL auto_increment,
        `
    group_namevarchar(50NOT NULL default '',
        `
    group_desctext default NULL,
        -- --------------------------------------------------------
        `
    imagevarchar(255) default NULL,
        `
    colorchar(7) default '#000000',
        `
    floodint unsigned NOT NULL default '15',
        -- --------------------------------------------------------
        `
    can_posttinyint unsigned NOT NULL default '1',
        `
    can_readtinyint unsigned NOT NULL default '1',
        `
    can_replaytinyint unsigned NOT NULL default '1',
        `
    can_editposttinyint unsigned NOT NULL default '1',
        `
    can_searchtinyint unsigned NOT NULL default '1',
        `
    can_sendemailtinyint unsigned NOT NULL default '1',
        `
    can_viewprofilestinyint unsigned NOT NULL default '1',
        `
    can_uploadstinyint unsigned NOT NULL default '1',
        -- --------------------------------------------------------
        `
    close_topictinyint unsigned NOT NULL default '0',
        `
    delete_topictinyint unsigned NOT NULL default '0',
        `
    edit_topictinyint unsigned NOT NULL default '0'
        `
    move_topictinyint unsigned NOT NULL default '0',
        `
    pin_topictinyint unsigned NOT NULL default '0'
        `
    delete_posttinyint unsigned NOT NULL default '0',
        `
    edit_posttinyint unsigned NOT NULL default '0',
        -- --------------------------------------------------------
        `
    admin_cattinyint unsigned NOT NULL default '0',
        `
    admin_forumstinyint unsigned NOT NULL default '0',
        `
    edit_userstinyint unsigned NOT NULL default '0',
        `
    admin_groupstinyint unsigned NOT NULL default '0',
        `
    admin_rankstinyint unsigned NOT NULL default '0',
        `
    admin_optionstinyint unsigned NOT NULL default '0',
        `
    admin_censoringtinyint unsigned NOT NULL default '0',
        `
    admin_banstinyint unsigned NOT NULL default '0',
        `
    prune_forumstinyint unsigned NOT NULL default '0',
    PRIMARY KEY(`group_id`)
    )
    TYPE=MyISAM DEFAULT CHARSET=utf8;

    CREATE TABLE `mp`(
        `
    midint unsigned NOT NULL auto_increment,
        `
    namevarchar(100NOT NULL default '',
        `
    texttext,
        `
    readtinyint unsigned NOT NULL default '0',
        `
    sendervarchar(25NOT NULL default '',
        `
    sender_idsmallint unsigned NOT NULL default '',
        `
    receivervarchar(25NOT NULL default '',
        `
    receiver_idsmallint unsigned NOT NULL default '0',
    PRIMARY KEY(`mid`)
    )
    TYPE=MyISAM DEFAULT CHARSET=utf8;

    CREATE TABLE `online` (
        `
    user_idvarchar(25NOT NULL,
        `
    timemediumint NOT NULL default '0',
    PRIMARY KEY(`user_id`)
    )
    TYPE=MyISAM DEFAULT CHARSET=utf8;

    CREATE TABLE `users`(
        `
    user_idsmallint unsigned NOT NULL auto_increment,
        `
    user_nickvarchar(25NOT NULL default '',
        `
    user_passwordchar(32NOT NULL default '',
        `
    user_emailvarchar(40NOT NULL default '',
        -- --------------------------------------------------------
        `
    activationvarchar(32) default NULL,
        `
    reactivationvarchar(64) default NULL,
        -- --------------------------------------------------------
        `
    lastactionvarchar(50) default NULL,
        `
    lastaccessvarchar(50) default NULL,
        `
    registrationvarchar(50) default NULL,
        -- --------------------------------------------------------
        `
    groupstinyint unsigned NOT NULL default '0',
        `
    postsmediumint unsigned NOT NULL default '0',
        -- --------------------------------------------------------
        `
    languagevarchar(20) default NULL,
        `
    skinsvarchar(20) default NULL,
        -- --------------------------------------------------------
        `
    timezonetinyint unsigned NOT NULL default '1',
        `
    visible_emailtinyint unsigned NOT NULL default '0',
        -- --------------------------------------------------------
        `
    namevarchar(50) default NULL,
        `
    msnvarchar(30) default NULL,
        `
    yahoovarchar(30) default NULL,
        `
    locationvarchar(30) default NULL,
        `
    birthdatevarchar(20) default NULL,
        `
    websitevarchar(100) default NULL,
        `
    avatarvarchar(100) default NULL,
        `
    signaturetext default NULL,
        -- --------------------------------------------------------
        `
    show_emoticonstinyint unsigned NOT NULL default '1',
        `
    show_signaturetinyint unsigned NOT NULL default '1',
        `
    show_avatartinyint unsigned NOT NULL default '1',
        `
    show_imgtinyint unsigned NOT NULL default '1',
        -- --------------------------------------------------------
        `
    perm_pmtinyint unsigned NOT NULL default '1',
        `
    perm_emailtinyint unsigned NOT NULL default '0',
        `
    disp_topicstinyint unsigned NOT NULL default '30',
        `
    disp_poststinyint unsigned NOT NULL default '20',
        `
    notify_posttinyint unsigned NOT NULL default '0',
    PRIMARY KEY(`user_id`)
    )
    TYPE=MyISAM DEFAULT CHARSET=utf8

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    up

  8. #8
    mmm, a me estrae TUTTO perfettamente

    codice:
    SELECT 
      u.*, g.*, COUNT(pm.read) as num_mp, o.* 
    
    FROM
      users AS u 
      INNER JOIN groups AS g ON u.groups = g.group_id 
      LEFT JOIN mp AS pm ON pm.receiver_id = u.user_id AND pm.read = 0 
      LEFT JOIN online AS o ON o.user_id = u.user_id
    
    WHERE
      u.user_id = 1
    Questa è la query che ho usato con le tabelle che hai passato. Ho fatto saltare via la pass e messo solo l'user id perché non serviva controllare quelli

    PS: la query che hai postato era sbagliata perché la tabella online non ha il campo user_nick ma il campo user_id che va referenziato con il campo user_id della tabella users
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    grazie mille!!!
    anche perchè immagino che avrai dovuto inserire valori e testare...

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.