U2KMedlem sedan jan. 2000231 inlägg Hej jag är newbee på så här långa SQL satser med kopplade tabeller. Innan använde jag mig av flera SQL satser och fick tillslut göra om hela databasstrukturen för att logiken försvann.
Nu har jag dock fixat till det mer logiskt.. men är inte så bra på det där med JOIN och att utesluta vissa poster..
Denna SQL sats visar alla matcher med resultat och med hjälp av INFO kör jag en IF sats för att ta fram de matcher som har match information..
SELECT D.m_info AS info, A.match_id AS m_id, CONCAT( X.hemma, ' - ', X.borta ) AS resultat, CONCAT( B.namn, ' - ', C.namn ) AS vs
FROM k_matcher AS A
LEFT JOIN k_resultat AS X ON X.match_id = A.match_id
LEFT JOIN k_klubbar AS B ON A.home_id = B.klubb_id
LEFT JOIN k_klubbar AS C ON A.away_id = C.klubb_id
LEFT JOIN k_match_analys AS D ON A.match_id = D.m_id
ORDER BY A.datum DESC LIMIT $n_max
IF satsen ser ut så här typ
If($row['info'] == NULL)
$link_show = false;
else
$link_show = true;
Låt oss säga att en post får TRUE, då kommer posten efter också att vara TRUE även om INFO är NULL..
Vad kan vara fel?
LarsGMedlem sedan dec. 200012 465 inlägg Varför använder du left join då?
SELECT D.m_info AS info, A.match_id AS m_id, CONCAT( X.hemma, ' - ', X.borta ) AS resultat, CONCAT( B.namn, ' - ', C.namn ) AS vs
FROM k_matcher AS A
inner JOIN k_resultat AS X ON X.match_id = A.match_id
inner JOIN k_klubbar AS B ON A.home_id = B.klubb_id
inner JOIN k_klubbar AS C ON A.away_id = C.klubb_id
inner JOIN k_match_analys AS D ON A.match_id = D.m_id
ORDER BY A.datum DESC LIMIT $n_max
U2KMedlem sedan jan. 2000231 inlägg Ja varför!
Jag har alltid gjort det och det har fungerat fint på mina övriga SQL satser..
;)
Dags att köpa en SQL bok och läsa på lite..
De där olika sätten att utföra JOIN är jag inte med på.
Tack LarsG för det snabba svaret.
U2KMedlem sedan jan. 2000231 inlägg SQL satsen gick igenom.. Men nu visar den bara de matcher som har information i k_match_analys.. Hur ska man göra för att den ska visa samtliga matcher..
LarsGMedlem sedan dec. 200012 465 inlägg I så fall får du gå tillbaka till left join. Jag tror att problemet där beror på hur du kontrollerar om något är null i PHP.
Du kan lägga in det direkt i din SQL-sats istället
SELECT case when D.m_info is null then 'False' else 'True' end AS info, A.match_id AS m_id, CONCAT( X.hemma, ' - ', X.borta ) AS resultat, CONCAT( B.namn, ' - ', C.namn ) AS vs
FROM k_matcher AS A
LEFT JOIN k_resultat AS X ON X.match_id = A.match_id
LEFT JOIN k_klubbar AS B ON A.home_id = B.klubb_id
LEFT JOIN k_klubbar AS C ON A.away_id = C.klubb_id
LEFT JOIN k_match_analys AS D ON A.match_id = D.m_id
ORDER BY A.datum DESC LIMIT $n_max
U2KMedlem sedan jan. 2000231 inlägg Nu fungerar det som det skall..
Tackar!
Uffe82Medlem sedan feb. 200711 inlägg Räkna
Hej!
Jag har ett litet problem som jag tänkte kanske går att lösa med SQL kodning..
SELECT case when A.hemma > A.borta then 'vinst' else 'forlust' end as banan FROM resultat AS A
LEFT JOIN match AS M ON M.match_id = A.match_id
WHERE M.team = 1 AND M.datum > '2007-01-01 00:00:00' AND M.datum < '2007-12-31 23:59:59'
AND A.hemma IS NOT NULL AND A.BORTA IS NOT NULL
RETURNERAR
BANAN
forlust
vinst
vinst
forlust
forlust
forlust
vinst
......
Finns det någon möjlighet att räkna antalet förluster i rad samt vinster i rad under det specifierade tidsintervallet.. eller skall man gå på resultatet med PHP programmering..
Tänkte att det kanske finns en snygg lösning med SQL kod..
headbugMedlem sedan sep. 2006858 inlägg Uffe82, skapa en ny fråge-tråd här så får du nog svar/mer svar/snabbare svar?!
MVH
/edit: hoppla såg den nya tråden precis efter...