webForumDet fria alternativet

JOIN sats

5 svar · 627 visningar · startad av dreas

dreasMedlem sedan jan. 2004146 inlägg
#1

Hallå igen!

Tänkte kolla varför inte denna lilla mysql queryn inte vill gå igenom.

$sql_bet = " SELECT * FROM matches LEFT JOIN bets ON matches.id=bets.matches_id WHERE matches.matchtype='". $getMatchtype ."' AND matches.round='" .$getRound. "' AND matches.played_at='" .$getDate. "' AND bets.user_id='".$user_id."'";

Det som händer är att den bara visar de som redan ligger i tabellen bets, men jag vill ju självklart lista alla som ligger i matches. Misstänker att det är den sista delen av queryn, dvs. .. WHERE.. bets.user_id='".$user_id."' som ställer till det.
Hur ska jag lista alla matcher som uppfyller kraven, samt de som redan har tippats med sina respektive tipp?

Hälsningar,
Andreas

K@llenMedlem sedan mars 20032 654 inlägg
#2

Fattar nog inte till 100 % vad du vill åstadkomma, men om du vill ha med passande resultat från båda tabellerna bör du använda en INNER JOIN istället.

dreasMedlem sedan jan. 2004146 inlägg
#3

Testat INNER JOIN samt växlat RIGHT till LEFT, med samma resultat.

Ska försöka vara lite tydligare i min beskrivning. Jag har två tabeller, en som heter matches där alla matcher listas med respektive lag som spelar. Därefter har jag en tabell som heter bets som listar alla tippningar man gör på matcherna, knutna till användare som loggar in.

Det jag nu vill göra, är att jag vill lista alla matcher som uppfyller kraven (i detta exempel: matchtype, round, played_at) oavsett ifall det finns något bet på användaren i tabellen bets. Därtill vill jag även plocka ut alla tippningar som finns för användaren gällande dessa matcher från bets för att erbjuda uppdatering/visning av dessa.

Hoppas jag förklarat någorlunda. Kan ju säga som så att om jag tar bort bets.user_id='".$user_id."' listar jag ju allas tippningar (men då visas ju även de matcher man inte har tippat på). Lägger jag till ovanstående rad visar jag enbart de tippade matcherna, men inte de icke tippade som ju måste visas.

antar att det är denna rad ( bets.user_id='".$user_id."' ) som strular.. hade ju velat köra som tillägg typ;
matches INNER JOIN bets ON bets.user_id='".$user_id."' WHERE ...

Men det funkar ju inte heller, i och med att ON ska definera relationen mellan tabellerna som jag förstått det. Är inte helt hemma på det här med JOIN, som ni märker :OO

LarsGMedlem sedan dec. 200012 465 inlägg
#4

Flytta villkoret till join-delen

LEFT JOIN bets ON matches.id=bets.matches_id 
   AND bets.user_id= '" . $user_id . "'"
dreasMedlem sedan jan. 2004146 inlägg
#5

LarsG skrev:

Flytta villkoret till join-delen

LEFT JOIN bets ON matches.id=bets.matches_id 
   AND bets.user_id= '" . $user_id . "'"

Jo, har ju redan försökt den varianten, men jag får samma sak där.. ingen listning på de jag inte tippat.

Hoppsan hoppsan, dubbelkolla medan jag skrev detta inlägg.. och jag hade kvar den på INNER JOIN, ändrade tillbaka den till det mäktiga LarsG skrev.. dvs, LEFT JOIN, och nog listas alla matcher!!

Tusen tack för den hjälp jag fått av alla, och en guldstjärna till LarsG! (y)

PeddaMedlem sedan juni 20004 880 inlägg
#6

Flyttas från PHP

Genererad på 375 ms · cache AV · v20260730165559-full.f96bc7eb