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
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
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..
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
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
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..