Ok, fett bra info. Tack.
Tog ut allt från mysql gjorde en SELECT istället än fora ut dem :P
9 svar · 1 238 visningar · startad av dwmedia
Tog ut allt från mysql gjorde en SELECT istället än fora ut dem :P
Ok, fett bra info. Tack.
Så där den skriver ut typ så här
14/12 25454 kr SEK
15/12 25454 kr SEK
16/12 25454 kr SEK
17/12 25454 kr SEK
18/12 25454 kr SEK
Men jag vill att den ska skriva 18 först sedan gå neråt.
18/12
17/12
16/12
istället än
16/12
17/12
18/12
Hur får man den foren till ändra riktning.
<?php
$cost_start_date = date("d",strtotime("-4 DAY"));
$cost_end_date = date("d");
for ($i = $cost_start_date; $i <= $cost_end_date; $i++) {
$in = $i < 10 ? '0'.$i : $i;
$coste_year = date("Y",strtotime("-5 DAY"));
$cost_month = date("m",strtotime("-5 DAY"));
$sql = "
SELECT COUNT(*) as h, SUM(a.advertisers_reports_cpc_spent) as b, SUM(a.advertisers_reports_uv_spent) as c, SUM(a.advertisers_reports_cpm) as d,
SUM(a.advertisers_reports_cpm_spent) as e, SUM(a.advertisers_reports_lead_spent) as f, SUM(a.advertisers_reports_sale_spent) as g,
a.advertisers_reports_aid, a.advertisers_reports_cid, a.advertisers_reports_uid, a.advertisers_reports_cpc_spent,
u.advertisers_users_owners, u.advertisers_access_id, u.advertisers_users_currency
FROM Advertisers_reports a
INNER JOIN Advertisers_users u ON a.advertisers_reports_uid = u.advertisers_users_id
WHERE a.advertisers_reports_uid = '$act' AND u.advertisers_users_id = '$act' AND u.advertisers_access_id = '{$_SESSION['sess_id']}' AND u.advertisers_users_admin > '1' AND
a.advertisers_reports_yyyy = '$coste_year' AND a.advertisers_reports_mm = '$cost_month' AND advertisers_reports_dd = '$in'
ORDER BY a.id DESC LIMIT 1
";
$query = mysql_query($sql) or die($sql . "<br/>" . mysql_error());
$result = mysql_fetch_assoc($query);
if ($result['d'] == "0") {
$count_cpm_price = "0";
} else {
$count_cpm_price = $result['d'] / $result['e'];
}
$count_price = number_format($result['b'] + $result['c'] + $count_cpm_price + $result['f'] + $result['g'], 2, ',', ' ');
echo "
<tr>";
if($row['advertising_daily_spend_year'] == $yyyy AND $row['advertising_daily_spend_month'] == $mm AND $row['advertising_daily_spend_day'] == $dd){
echo "<td class='datetime'>Today</td>";
} else {
echo "<td class='datetime'>$in/$cost_month</td>";
}
echo "
<td class='spend'>$count_price kr {$result['advertisers_users_currency']}</td>
</tr>
";
}
?>
Du gör ju en fråga per datum... vilket känns om att mySQL borde kunna göra en sådan fråga en gång med between som en fråga.
Jo men den tar bara ut dem 5 senaste dagarna.
Själva SQL den räknar bara ihop columerna och värdet.
Kör sedan for tänkte jag för loopa igenom dem 5 senaste dagarna.
Men du får gärna vissa vad som kan va bättre.
Problemet är att ena tabellen har kanske 100.000 lika dana aid cid uid
men ifrån olika datum. Varje dag får den en ny rad.
Kör en GROUP BY med?
Hur bör man helst ha det
yyyy-mm-dd
eller
yyyy
mm
ddd
Informationen hos mysql så ser det ut som sk vara lättare om man har år månad dag i samma rad.
Kan man ta ut värden som inte har något i en INNER JOINE.
id måste matcha alla rader i en INNER JOINE annars loopar dem ju inte ut dem?
Går det inte lösa på något sätt?
Så där ser SQL ut och måste jag verkligen ha en SELECT i en SELECT för grouperna ORDER BY före en GROUP BY?
Tänkte så om det går som man gör med typ DESC, ASC typen?
$sql = "SELECT COUNT(*) as h, SUM(b.advertisers_reports_cpc_spent) as b, SUM(b.advertisers_reports_uv_spent) as c, SUM(b.advertisers_reports_cpm) as d,
SUM(b.advertisers_reports_cpm_spent) as e, SUM(b.advertisers_reports_lead_spent) as f, SUM(b.advertisers_reports_sale_spent) as g,
a.id, a.advertisers_campaign_name, a.advertisers_campaign_uid, a.advertisers_campaign_status, a.advertisers_campaign_bugget, a.advertisers_campaign_remaining, a.advertisers_campaign_start_date, a.advertisers_campaign_end_date,
b.advertisers_reports_cid,
c.advertisers_users_owners, c.advertisers_access_id
FROM Advertisers_users c
INNER JOIN Advertisers_campaign a ON c.advertisers_users_id = a.advertisers_campaign_uid
JOIN Advertisers_reports b ON b.advertisers_reports_cid = a.id
WHERE b.advertisers_reports_uid = '$act' AND c.advertisers_users_id = '$act' AND c.advertisers_access_id = '{$_SESSION['sess_id']}' AND c.advertisers_users_admin > '1'
GROUP BY a.id ASC LIMIT ".$start.",".$antalSida."";
$result = @mysql_query($sql) or die('<b>Error selecting data from '.$table.'</b><br />'.mysql_error());
while ($row = @mysql_fetch_assoc($result)) {
GROUP BY ersätter inte ORDER BY, det är två helt olika saker. Du plockar inte bort order by om du vill göra en sortering.
Hur kan man få den till lista även dem som inte har något i raport?
INNER JOINE tar som sagt bara ut det som finns i alla a3 tabeller.
Säg om ett group inte har fått en insättning i rapport så visas inte kampajnen för tills den får det :/