Ich hab hier ne Suche mit mehreren Kriterien, irgendwie check ich aber nicht wie ich die querys bauen muss, ich ständig fehler bekomme.
wie würdet ihr das besser machen
besten dank
Problem:
wie würdet ihr das besser machen
PHP-Code:
<?php
// wird für die mysql abfrage benötigt
//search bzw a-z ansicht
$status = get_var('status', TYPE_GET);
$search = get_var('search', TYPE_POST);
$show = get_var('show', TYPE_GET);
//es handelt sich um eine projektnummer
if (ctype_digit($search) AND !empty($search) ) {
//nummer auseinandernehmen
$filter = "WHERE `spid` LIKE '".substr($search, 4)."'";
$filter .= "AND YEAR(date)=20".substr($search,2,2)." AND MONTH(date)=".substr($search,0,2)."";
//es handelt sich um eine projektnummer
} else if (!empty($search)) {
$filter = "WHERE `pname` LIKE '%".$search."%'";
} elseif (!empty($show) ) {
$filter = "WHERE `name` LIKE '".$show."%'";
} else {
$filter ="";
}
//statusansicht
if (!empty($status)) {
$status = "AND status=".$status."";
}
elseif ($status== "0") {
$status = "AND status=0";
}
else {
$status = "";
}
//blättern
$sql = "SELECT
P.pid as pid, P.spid as spid, P.date as pdate, P.status, P.spid
FROM
".PREFIX."projekt P
$filter
$status ";
vd($sql);
$result = $objDB->query($sql);
if(DB::isError($result)) {
die($result->getMessage());
}
//anzahl aller einträge für die aktuelle seite
$count = $result->numRows();
//Wenn keine Seite gewählt Site = 0
$get_page = get_var('page', TYPE_GET);
if (empty($get_page)) {
$page = 0;
}else{
$page = $get_page;
}
$sql = "SELECT
P.pid as pid, P.name as pname, P.date as pdate, P.status, P.spid,
C.name as cname
FROM
".PREFIX."projekt P
LEFT JOIN ".PREFIX."client C
ON C.cid = P.cid
$filter
$status
ORDER BY
`P.name` ASC
LIMIT
$page , 10";
vd($sql);
$result = $objDB->query($sql);
if(DB::isError($result)) {
die($result->getMessage());
}
?>
besten dank
Problem:
http://www.mysql.de/doc/de/Problems_with_alias.html
Beachten Sie, dass ANSI-SQL verbietet, in einer WHERE-Klausel auf ein Alias zu verweisen. Das liegt daran, dass der Spaltenwert möglicherweise noch nicht feststeht, wenn der WHERE-Code ausgeführt wird.
Beachten Sie, dass ANSI-SQL verbietet, in einer WHERE-Klausel auf ein Alias zu verweisen. Das liegt daran, dass der Spaltenwert möglicherweise noch nicht feststeht, wenn der WHERE-Code ausgeführt wird.
Kommentar