PHP met distinct query in een array

  • Hallo allemaal,


    Ik loop momenteel vast met een query die ik in een array wil hebben. Ik heb namelijk de volgende code:


    PHP
    $query = mysql_query("SELECT distinct id FROM users WHERE id in ( select `id_user_2` as id from user_likes where(`id_user_1` = '$user_id') )");


    Dit staat in een user_likes tabel. Dit is een tabel waarbij users elkaar kunnen liken, zodra beide users elkaar hebben geliked, moet er een match komen (Tinder idee). Deze tabel ziet er zo uit :


    user_id_1 user_id_2
    1 2
    1 3
    2 1
    etc.


    Nu laat ik deze waardes op de volgende manier verschijnen :



    Overzichtelijke code op: http://pastebin.com/Z09pjiW0


    Echter, wil ik het op de volgende manier hebben:


    In de while wil ik een array maken, waarin deze waardes komen te staan. Dus iets als:


    PHP
    array(match_user_1 => $result_1, match_user_2 => restult_2)


    Met andere woorden, deze array moet dynamisch zijn. Hij moet zich namelijk aanpassen aan het aantal matches dat er is. Nu heb ik alleen geen flauw idee hoe ik dit moet doen. Iemand die mij hiermee kan helpen? :D



    PS: Let niet op de veiligheid en ouderdom van de queries, het gaat me alleen even om het idee en dat het werkt.

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Klopt het dat je vraag niet zo zeer met "PHP met distinct query in een array" te maken heeft, of begrijp ik dat nu verkeerd?


    Voor zo ver ik weet kan je gewoon:

    Code
    $matches = array();
    $matches[]= "match1naam";
    $matches[]= "match2naam";
    ...


    dit add telkens achteraan in je array de nieuwste entry.
    Hierna kan je ze gewoon indexen via $matches[0], $matches[1] iirc.


    je kan ook je array dynamisch laten groeien via de push & pop methods


    of is dit niet wat je vraag is :) ?

  • Hallo Thjeu, ik heb hier wel de oplossing voor dit heb ik namelijk ooit gebruikt voor het leggen van een relatie tussen vrienden. Ik zal het even opzoeken en in deze post aanvullen ;)


    Edit: Dit is met een querybuilder gebouwd dus er kunnen fouten inzitten maar dit zal vast wel werken
    Je zou eventueel nog een status moeten toekennen in je WHERE statements.


    Dit was mijn spreekbeurt, zijn er nog vragen?

    Bewerkt één keer, laatst door M.Beers ().

  • Michael, dat is niet helemaal wat ik bedoel. Met dank aan quitta heb ik wat gemaakt:



    link pastebin:
    http://pastebin.com/8fncBQGP


    Maar dit geeft mij de volgende output:


    PHP
    {"match_3":"henk"}{"match_3":"ilse"}{"match_3":"lisa"}


    wat ik wil hebben is:

    PHP
    {"match_0":"henk"}{"match_1":"ilse"}{"match_2":"lisa"}
  • Stefan en Quitta, jullie maken mijn dag geweldig! Hij werkt eindelijk.


    Complete code:


  • Dan werkt mijn oplossing toch prima zet er een status veld bij en maak daarmee de status op..


    1 = pending (de verzender heeft geliked, de ontvanger niet)
    2 = match


    Wat mijn queries doet is namelijk, hij haaaalt alle relaties op die jij hebt gemaakt met een andere gebruiker


    Edit Verder zie ik ook dat je een query uitvoerd => daarop een while() loop => in de while loop nogmaals een query uitvoerd... dit is echt onnodig zwaar, vandaar die JOINS :)

  • Ah, mijn SQL / PHP kennis reikt helaas niet zo ver... Ik dacht namelijk dat jouw query iets totaal anders deed...


    Ik weet dat mijn oplossing atm niet de beste is, maar het is voor Appinventor. Aangezien de PHP code niet zal worden beoordeeld, maakt het niet zo veel uit hoe de PHP in elkaar zit. Wel bedankt voor het meedenken michael! :)


    Edit: Zie nu dat ik bovenstaand niet in de start post heb gezet, nja bij deze dan... Het is voor school :)

  • Ik heb heeeeel even snel een voorbeeld gemaakt met een table dump misschien dat je er dan wat meer van snapt :thumbup:


    SQL
    SELECT
    	*
    FROM
    	user_likes l
    INNER JOIN
    	users u ON l.request_id = u.id OR l.respond_id = u.id
    WHERE
    	u.id != 1 AND l.request_id = 1
    OR
    	u.id != 1 AND l.respond_id = 1



    Dit is namelijk exact wat je wilt volgensmij ...

  • Ik heb van jullie beiden het even geprobeerd. Vooralsnog kwam ik er niet uit met jouw query Michael. Met jouw query kwamen er ook rijen tevoorschijn waarbij de formule niet telde.


    Pseudocode:


    PHP
    SELECT *
    WHERE Rij 1 = $user_id
    AND Rij 2 = $user_id


    Dus, wanneer user 1 user 2 heeft geliked en wanneer user 2 user 1 heeft geliked, moet hier een resultaat voor komen.


    De code van Patrick, werkte met mijn invulling echter wel! Deze heb ik nu ook gebruikt! Bedankt :)


    PS: Het zou maar zo kunnen dat jouw code wel werkt Michael, maar ik heb er gewoon niet genoeg verstand van.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!