Query opsplitsen in tweeen
Pelckie schreef op 29.01.2008 17:24:
Aanzetten die zooi!Error report staat idd op een laag niveau, sterker nog het staat uit. Dus als ik bijvoorbeeld syntax errors heb dan is dat wel is lastig...
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
define('DEBUG' , true); // false voor een live-website
ini_set('display_errors', DEBUG);
error_reporting(E_ALL | E_STRICT);
// rest van je code
?>
define('DEBUG' , true); // false voor een live-website
ini_set('display_errors', DEBUG);
error_reporting(E_ALL | E_STRICT);
// rest van je code
?>
Vervolgens kun je in je code de constante DEBUG gebruiken om te bepalen of je een systeemfout op je scherm wilt tonen of juiste een gebruikersvriendelijke foutmelding.
CREATE TABLE `mct_hitpages` (
`id` int(11) NOT NULL auto_increment,
`page_title` varchar(128) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `page_title` (`page_title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=190 ;
CREATE TABLE `mct_paths` (
`id` int(11) NOT NULL auto_increment,
`page_id` int(11) NOT NULL default '0',
`position` int(11) NOT NULL default '0',
`session_id` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `session_id` (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14113;
CREATE TABLE `mct_sessions` (
`id` int(11) NOT NULL auto_increment,
`visitors_id` int(11) NOT NULL default '0',
`member_id` int(11) NOT NULL default '0',
`session` varchar(32) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`),
KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6909;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
$Query_All = SELECT session_id, count( session_id ) AS amount, date
FROM mct_paths
INNER JOIN mct_sessions ON mct_paths.session_id = mct_sessions.id
GROUP BY session_id
HAVING date
BETWEEN '$startDates'
AND '$endDates'
ORDER BY amount ASC
while($Session_All = mysql_fetch_assoc($Query_All))//start while loop through paths
{
$end=0;
$y=0;
$Query_Session = MySQL_Query("SELECT page_id FROM mct_paths WHERE session_id ='".$Session_All['session_id']."' ");
while($Page_ID = mysql_fetch_assoc($Query_Session)) //&& $End == 0) //start while in while
{
$y++;
$Query_Pages = MySQL_Query("SELECT page_title FROM mct_hitpages WHERE id='".$Page_ID['page_id']."'");
$Page = mysql_fetch_assoc($Query_Pages);
$PageTotal = mysql_num_rows($Query_Session);
$arrow = ($y == $PageTotal) ? "" : "<img src='images/arrow.png'>";
if(strlen($List[$i])<350)
{
$List[$i] .= $Page['page_title'].$arrow;//fill array
}
else
{
if ($end==0)
{
$List[$i] .= "...";//fill array
$end=1;
}
}
}
$i++;
}
?>
$Query_All = SELECT session_id, count( session_id ) AS amount, date
FROM mct_paths
INNER JOIN mct_sessions ON mct_paths.session_id = mct_sessions.id
GROUP BY session_id
HAVING date
BETWEEN '$startDates'
AND '$endDates'
ORDER BY amount ASC
while($Session_All = mysql_fetch_assoc($Query_All))//start while loop through paths
{
$end=0;
$y=0;
$Query_Session = MySQL_Query("SELECT page_id FROM mct_paths WHERE session_id ='".$Session_All['session_id']."' ");
while($Page_ID = mysql_fetch_assoc($Query_Session)) //&& $End == 0) //start while in while
{
$y++;
$Query_Pages = MySQL_Query("SELECT page_title FROM mct_hitpages WHERE id='".$Page_ID['page_id']."'");
$Page = mysql_fetch_assoc($Query_Pages);
$PageTotal = mysql_num_rows($Query_Session);
$arrow = ($y == $PageTotal) ? "" : "<img src='images/arrow.png'>";
if(strlen($List[$i])<350)
{
$List[$i] .= $Page['page_title'].$arrow;//fill array
}
else
{
if ($end==0)
{
$List[$i] .= "...";//fill array
$end=1;
}
}
}
$i++;
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Pelckie
Heeft er nog iemand suggesties?
Blanche schreef op 29.01.2008 17:21:
Als het daadwerkelijk 3 hele verschillende queries op 3 verschillende tabellen zou betreffen, kun je er waarschijnlijk niet omheen. Maar als ik zo eens kijk naar de queries die je gebruikt, krijg ik het sterke vermoeden dat je dit waarschijnlijk ook wel in 1 of 2 queries kunt oplossen...
Laat anders eens zien hoe je datamodel eruit ziet en omschrijf eens wat je precies uit die tabellen wilt ophalen. Dan kunnen we eens kijken :-)
Laat anders eens zien hoe je datamodel eruit ziet en omschrijf eens wat je precies uit die tabellen wilt ophalen. Dan kunnen we eens kijken :-)
Ik heb inmiddels het datamodel hierboven gepost, ben benieuwd of je er iets van kan maken met 1 of 2 queries..
Welke gegevens wil je uit bovenstaande datamodel halen dan?