Page 1 of 2 12 Last
  1. #1
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55

    2x username uit dezelfde tabel halen, maar verschillende waarden

    PHP Code:
    "SELECT tt_userreacties.reactie_id, tt_userreacties.user_id AS profiel_id, 
            tt_userreacties.datum, phpbb_users.username AS profiel_name 
            FROM tt_userreacties 
            LEFT JOIN phpbb_users ON phpbb_users.user_id = tt_userreacties.user_id 
            GROUP BY tt_userreacties.user_id
            ORDER BY tt_userreacties.reactie_id DESC 
            LIMIT 0 , 10"

    Dit toont o.a. de naam van de gebruiker waarop een reactie is geplaatst in zijn profiel. Ik wil echter ook nog de naam van de gebruiker die gereageerd heeft!
    Daarvoor heb ik
    tt_userreacties.poster_id => id van de poster (verwijst naar phpbb_users)
    tt_userreacties.user_id => id van de eigenaar van het profiel (verwijst ook naar phpbb_users tabel)

    Ik kan dus één van die 2 selecteren, maar ik zou niet weten hoe beiden te selecteren...
    no votes  

  2. #2

    Registered
    18/11/02
    Location
    Eke, België
    Posts
    2,448
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Nog een tweede keer JOINEN met de phpbb_users tabel. In dat geval moet je dus zeker je velden voorafgaan laten gaan door een alias omdat je twee keer dezelfde tabel gebruikt. Om achteraf een onderscheid te kunnen maken zul je dus ook de geselecteerd velden die beide namen bevatten moeten hernoemen (alias opgeven).

    PHP Code:
    "SELECT tt_userreacties.reactie_id, tt_userreacties.user_id AS profiel_id, 
            tt_userreacties.datum, u1.username AS profiel_name, u2.username AS reactie_name 
            FROM tt_userreacties 
            LEFT JOIN phpbb_users u1 ON u1.user_id = 
    tt_userreacties.user_id 
            LEFT JOIN phpbb_users u2 ON u2.user_id = tt_userreacties.poster_id 
            GROUP BY tt_userreacties.user_id 
            ORDER BY tt_userreacties.reactie_id DESC 
            LIMIT 0 , 10"

    Ik denk dat het dat moet zijn, vergeef me mijn eventuele foutjes
    no votes  

  3. #3
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Hmm inderdaad, dat werkt.

    Maar het probleem is nu dat hij de eerste reactie op een profiel toont, en niet de laatste....
    no votes  

  4. #4

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Quote Originally Posted by -P|b-SqUeaLeR
    This quote is hidden because you are ignoring this member. Show
    Hmm inderdaad, dat werkt.

    Maar het probleem is nu dat hij de eerste reactie op een profiel toont, en niet de laatste....
    laat die order by weg en vervang dat door
    WHERE
    tt_userreacties.reactie_id = MAX(tt_userreacties.reactie_id)
    no votes  

  5. #5
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Quote Originally Posted by killgore
    This quote is hidden because you are ignoring this member. Show
    laat die order by weg en vervang dat door
    WHERE
    tt_userreacties.reactie_id = MAX(tt_userreacties.reactie_id)
    error:

    SELECT tt_userreacties.reactie_id, tt_userreacties.poster_id AS poster_id, tt_userreacties.user_id AS profiel_id, tt_userreacties.datum, u1.username AS profiel_name, u2.username AS poster_name
    FROM tt_userreacties
    LEFT JOIN phpbb_users u1 ON u1.user_id = tt_userreacties.user_id
    LEFT JOIN phpbb_users u2 ON u2.user_id = tt_userreacties.poster_id
    GROUP BY tt_userreacties.user_id
    WHERE tt_userreacties.reactie_id = MAX( tt_userreacties.reactie_id )
    LIMIT 0 , 10

    MySQL retourneerde:


    You have an error in your SQL syntax near 'WHERE tt_userreacties.reactie_id = MAX( tt_userreacties.reactie_id ) LIMIT 0 , ' at line 1
    no votes  

  6. #6

    Registered
    18/11/02
    Location
    Eke, België
    Posts
    2,448
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    De WHERE-clausule komt voor de GROUP BY-clausule. Da's standaard SQL syntax
    no votes  

  7. #7
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Quote Originally Posted by DarkBone
    This quote is hidden because you are ignoring this member. Show
    De WHERE-clausule komt voor de GROUP BY-clausule. Da's standaard SQL syntax
    Had ik al geprobeerd:

    SELECT tt_userreacties.reactie_id, tt_userreacties.poster_id AS poster_id, tt_userreacties.user_id AS profiel_id, tt_userreacties.datum, u1.username AS profiel_name, u2.username AS poster_name
    FROM tt_userreacties
    LEFT JOIN phpbb_users u1 ON u1.user_id = tt_userreacties.user_id
    LEFT JOIN phpbb_users u2 ON u2.user_id = tt_userreacties.poster_id
    WHERE tt_userreacties.reactie_id = MAX( tt_userreacties.reactie_id )
    GROUP BY tt_userreacties.user_id
    LIMIT 0 , 10

    MySQL retourneerde:


    Invalid use of group function
    no votes  

  8. #8

    Registered
    18/11/02
    Location
    Eke, België
    Posts
    2,448
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Hmm ik had al zoiets verwacht, ik dacht dat de group functions niet konden gebruikt worden in de WHERE-clausule... heb het nagelaten om te controleren.

    *edit*
    Heb je geen datumveld om op te sorteren dan ? Je regelt de sorterig oplopend of aflopend door middel van ASC of DESC ... eventueel kun je daarvoor ook het ID gebruiken, alhoewel een datum veld beter geschikt is.
    Last edited by DarkBone; 28-04-2004 at 16:50.
    no votes  

  9. #9
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Quote Originally Posted by DarkBone
    This quote is hidden because you are ignoring this member. Show
    Hmm ik had al zoiets verwacht, ik dacht dat de group functions niet konden gebruikt worden in de WHERE-clausule... heb het nagelaten om te controleren.

    *edit*
    Heb je geen datumveld om op te sorteren dan ? Je regelt de sorterig oplopend of aflopend door middel van ASC of DESC ... eventueel kun je daarvoor ook het ID gebruiken, alhoewel een datum veld beter geschikt is.
    Ja ik heb een datum veld, maar als ik order by datum ipv order by reactie_id doet, geeft dat geen verschil. Het probleem zit em in die group by, hij groepeert wel de rijen, maar per groep toont hij de kleinste reactie_id, ipv de grootste...

    EDIT: ff visueel voorstellen:



    Reactie ID 8 en 5 moet hij eruit halen...
    no votes  

  10. #10
    no votes  

  11. #11

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    SELECT tt_userreacties.reactie_id, tt_userreacties.poster_id AS poster_id, tt_userreacties.user_id AS profiel_id, tt_userreacties.datum, u1.username AS profiel_name, u2.username AS poster_name
    FROM tt_userreacties
    LEFT JOIN phpbb_users u1 ON u1.user_id = tt_userreacties.user_id
    LEFT JOIN phpbb_users u2 ON u2.user_id = tt_userreacties.poster_id
    WHERE (tt_userreacties.reactie_id = MAX( tt_userreacties.reactie_id ))
    GROUP BY tt_userreacties.user_id
    LIMIT 0 , 10

    dit mssch? () kunnen wonderen doen in de wereld van mysql
    no votes  

  12. #12

    Registered
    18/11/02
    Location
    Eke, België
    Posts
    2,448
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    invalid use of GROUP BY functions betekend dus dat ze in dit geval op de verkeerde plaats worden gebruikt (kunnen niet in WHERE-clausule gebruikt worden).

    Probeer dit eens:

    SELECT tt_userreacties.reactie_id, tt_userreacties.poster_id AS poster_id, tt_userreacties.user_id AS profiel_id, tt_userreacties.datum, u1.username AS profiel_name, u2.username AS poster_name
    FROM tt_userreacties
    LEFT JOIN phpbb_users u1 ON u1.user_id = tt_userreacties.user_id
    LEFT JOIN phpbb_users u2 ON u2.user_id = tt_userreacties.poster_id
    GROUP BY tt_userreacties.user_id
    HAVING tt_userreacties.reactie_id = MAX( tt_userreacties.reactie_id )
    LIMIT 0 , 10


    De HAVING clausule kan wel group functions bevatten, is speciaal daarvoor in het leven geroepen.
    no votes  

  13. #13
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Lol, some strange shit here

    Quote Originally Posted by killgore
    This quote is hidden because you are ignoring this member. Show
    SELECT tt_userreacties.reactie_id, tt_userreacties.poster_id AS poster_id, tt_userreacties.user_id AS profiel_id, tt_userreacties.datum, u1.username AS profiel_name, u2.username AS poster_name
    FROM tt_userreacties
    LEFT JOIN phpbb_users u1 ON u1.user_id = tt_userreacties.user_id
    LEFT JOIN phpbb_users u2 ON u2.user_id = tt_userreacties.poster_id
    WHERE (tt_userreacties.reactie_id = MAX( tt_userreacties.reactie_id ))
    GROUP BY tt_userreacties.user_id
    LIMIT 0 , 10

    dit mssch? () kunnen wonderen doen in de wereld van mysql
    => Invalid use of group function

    Quote Originally Posted by DarkBone
    This quote is hidden because you are ignoring this member. Show
    invalid use of GROUP BY functions betekend dus dat ze in dit geval op de verkeerde plaats worden gebruikt (kunnen niet in WHERE-clausule gebruikt worden).

    Probeer dit eens:

    SELECT tt_userreacties.reactie_id, tt_userreacties.poster_id AS poster_id, tt_userreacties.user_id AS profiel_id, tt_userreacties.datum, u1.username AS profiel_name, u2.username AS poster_name
    FROM tt_userreacties
    LEFT JOIN phpbb_users u1 ON u1.user_id = tt_userreacties.user_id
    LEFT JOIN phpbb_users u2 ON u2.user_id = tt_userreacties.poster_id
    GROUP BY tt_userreacties.user_id
    HAVING tt_userreacties.reactie_id = MAX( tt_userreacties.reactie_id )
    LIMIT 0 , 10


    De HAVING clausule kan wel group functions bevatten, is speciaal daarvoor in het leven geroepen.
    das nog raarder:
    Dit zit in de tt_userreacties tabel:
    http://studweb.hogent.be/~031129sd/tt_userreacties.jpg

    Uw query maakt er dit van:
    http://studweb.hogent.be/~031129sd/tt_userreacties2.jpg
    no votes  

  14. #14

    Registered
    12/10/02
    Location
    mars
    Posts
    14,319
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    wel, ik had probs bij het gebruiken van mysql-functies in statements als WHERE GROUP BY en ORDER BY,

    probeer eens dit :
    PHP Code:
    SELECT tt_userreacties.reactie_idtt_userreacties.poster_id AS poster_idtt_userreacties.user_id AS profiel_idtt_userreacties.datumu1.username AS profiel_nameu2.username AS poster_name,MAX(tt_userreacties.reactie_id) AS tot
    FROM tt_userreacties
    LEFT JOIN phpbb_users u1 ON u1
    .user_id tt_userreacties.user_id
    LEFT JOIN phpbb_users u2 ON u2
    .user_id tt_userreacties.poster_id
    WHERE tt_userreacties
    .reactie_id tot
    GROUP BY tt_userreacties
    .user_id
    LIMIT 0 
    10 
    no votes  

  15. #15
    Squealer's Avatar
    Registered
    17/07/02
    Location
    Kruishoutem
    Posts
    4,442
    iTrader
    6 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/55
    Unknown column 'tot' in 'where clause'

    Ben aant opgeven, kzal dan toch moeten overwegen een "laatstereactie" veld bij te houden
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in