PHP mysql abfrage optimieren

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
557
hallo,

ich habe in einer datenbank verschiedene datensätze die sich vorallem durch " id "'s unterschieden.

eine der id's sind die account kategorien. der user hat die möglichkeit entweder für einen account alle einträge anzeigen zu lassen oder sich alle anzuzeigen.

mein problem ist nun die sql abfrage.

PHP:
$db_result = $this->database->runSQLQuery("SELECT * FROM ".GLOBAL_VALUES_DB." WHERE `user_id` = '".$_SESSION['id']."' AND `enter_date` LIKE '".$enter_date."%' AND `account_id` = '".$_SESSION['account']."' ");

das setzen der session erfolgt dann wie folgt:
PHP:
	            if(!isset($_SESSION['account'])) {
		            if($_GET['account']) {
			            $_SESSION['account'] = $_GET['account'];
		            } else {
			            $_SESSION['account'] = $globals->set_account();
		            }
	            }

das aufrufen der classe:
PHP:
	public function set_account() {
		return ("*");
	}

wenn ich account=1 oder account=2 setze, funktioniert es.
das problem ist nun dass default: * nichts bringt. kann mir jemand hier helfen?
 
account_id = '*' funktioniert nicht. Lass die Prüfung einfach weg. Platzhalter sind übrigens % und _ und funktionieren nur bei Strings mit LIKE.
 
genau, das * bringt nichts. sagte ich ja bereits.
wenn ich die prüfung weglasse, werden mir aber alle einträge angezeigt und ich kann nicht filtern.
 
Du willst doch mit Sicherheit alle Einträge unabhängig der account_id oder? Dann lass AND account_id = xy weg, dann bekommst du alle unabhängig der account_id.
 
Naja sicher.

Mit Account-Filter:
Code:
SELECT *
FROM global_values
WHERE
	`user_id` = $_SESSION['id'] AND
	`enter_date` LIKE '$enter_date%' AND
	`account_id` = '".$_SESSION['account']."'
Ohne Account-Filter:
Code:
SELECT *
FROM global_values
WHERE
	`user_id` = $_SESSION['id'] AND
	`enter_date` LIKE '$enter_date%'

Code:
$this->database->runSQLQuery("SELECT * FROM ".GLOBAL_VALUES_DB."
WHERE `user_id` = '".$_SESSION['id']."' AND
`enter_date` LIKE '".$enter_date."%' ".($alle_filtern ? :
    '' :
    "AND `account_id` = '".$_SESSION['account']."'") );
 
kannst du vielleicht noch kurz erläutern was der letzte code-block zu sagen hat? im speziellem
Code:
.($alle_filtern ? :
'' :
"AND `account_id` = '".$_SESSION['account']."'") );
sowas hab ich bislang noch nicht gesehen gehabt.
 
Das ist eine verkürzte If-Abfrage.
Code:
if( $alle_filtern )
  $var .= '';
else
  $var .= "AND `account_id` = '".$_SESSION['account']."'"
 
hmm,
das scheint bei mir nicht zu funktionieren.

Code:
$db_result = $this->database->runSQLQuery("SELECT * FROM ".GLOBAL_VALUES_DB." WHERE `user_id` = '".$_SESSION['id']."' AND `enter_date` LIKE '".$enter_date."%'. ($alle_filtern ? : '' : AND `account_id` = '".$_SESSION['account']."' ) ");

wenn ich die zeile 1zu1 bei dir rauskopiere, zeigt er mir diverse fehler an.

Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '. ( ? : '' : AND `account_id` = '1' )' at line 1 (SELECT * FROM calculator_values WHERE `user_id` = '1' AND `enter_date` LIKE '2012-04-01%'. ( ? : '' : AND `account_id` = '1' ) )
 
Du musst den String beenden für die Abfrage. Dir fehlt das Anführungszeichen in $enter_date,"%'".($alle_filtern.
 
wenn ich die zeile 1zu1 übernehme kommt es zu fehlern die ich nicht ganz verstehe:

wes7x3vt.png


1. expected )
2. expected simicolon
expected statement
 
kompakte Schreibweise der if ist falsch. So ist es richtig:

$alle_filtern?' ':"AND 'account_id' = '".$_SESSION['account']."'"
 
Zurück
Oben