SQL - Abfrage

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
diegoriv
Beiträge: 314
Registriert: Di 01.Feb, 2005 15:25
Wohnort: Wien
Kontaktdaten:

SQL - Abfrage

Beitrag von diegoriv »

Hab eben die Krise, weil ich keine vernünftige Erklärung zu einer sql-Abfrage finden kann.

folgender Teil steht im code (cal_view_new.php vom calpro)

Code: Alles auswählen

....
WHERE c.valid = 'yes' AND c.r_type != 'D' AND ";
Ich hätte da gerne ein LIMIT X eingeführt, aber das geht genau nicht.

1) Was macht das AND am Ende der Zeile, wenn nichts mehr kommt. (Ohne gibts ne Fehlermeldung)?
2) Wie bau ich da ein Limit ein?

Vielen Dank
[center]***********************************************************
Alpinum.at - Forum f?r Bergfreunde
***********************************************************[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Poste doch mal mehr als nur diese eine Zeile.
Der Kalender baut schliesslich die meisten Abfragen in mehrern Blöcken zusammen und da kommt auch irgendwann die Stelle, wo man ein LIMIT einsetzen kann.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
diegoriv
Beiträge: 314
Registriert: Di 01.Feb, 2005 15:25
Wohnort: Wien
Kontaktdaten:

Beitrag von diegoriv »

dann also der ganze block

Code: Alles auswählen

$sql = "SELECT *, c.event_start FROM ".CAL_TABLE." AS c
	LEFT JOIN ".CAL_RECUR." AS r ON c.r_group_id = r.r_group_id
	LEFT JOIN ".CAL_CATS." AS cat ON c.category = cat.cat_id
	LEFT JOIN ".CAL_GROUP_EVENT." AS ge ON c.id = ge.event_id
	LEFT JOIN ".USERS_TABLE." AS u ON u.user_id = c.user_id
WHERE c.valid = 'yes' AND c.r_type != 'D' AND ";
[center]***********************************************************
Alpinum.at - Forum f?r Bergfreunde
***********************************************************[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

DANACH, nicht davor. Das LIMIT wird nach erst anschliessend eingebaut.
Also so 15-20 Zeilen danach mal posten...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
diegoriv
Beiträge: 314
Registriert: Di 01.Feb, 2005 15:25
Wohnort: Wien
Kontaktdaten:

Beitrag von diegoriv »

jetzt kapier ich das *lichtaufgeh*. es kommen irgendwo später noch weitere anweisungen. frage 1 ist damit hinfällig. hier der ganze block- ich hoffe, das reicht

Code: Alles auswählen

// MOD group specific and private events - start
$sql = "SELECT *, c.event_start FROM ".CAL_TABLE." AS c
	LEFT JOIN ".CAL_RECUR." AS r ON c.r_group_id = r.r_group_id
	LEFT JOIN ".CAL_CATS." AS cat ON c.category = cat.cat_id
	LEFT JOIN ".CAL_GROUP_EVENT." AS ge ON c.id = ge.event_id
	LEFT JOIN ".USERS_TABLE." AS u ON u.user_id = c.user_id
	WHERE c.valid = 'yes' AND c.r_type != 'D' AND ";
	
if(isset($groups[0])) {
	// If the user is member of 1+ usegroups then check for these results too.
	while(list(,$group) = each($groups)) {
		if(count($groups > 1) && isset($sql_groups)) {
			 $sql_groups .= " OR ";
		}
		$sql_groups .= "ge.group_id = ".$group['group_id'];
	}
	$sql_access = '(c.event_access = 2 AND ('.$sql_groups.' OR ge.group_id IS NULL OR ge.group_id = 0))';
}
$sql_access .= ($groups && $cal_config['allow_private']) ? ' OR ' : '';
if($cal_config['allow_private']) {
	$sql_access .= ' (c.event_access = 1 AND c.user_id = '.$userdata['user_id'].') ';
}
$sql .= ($sql_access) ? '('.$sql_access.' OR c.event_access = 0)  AND ' : 'c.event_access = 0 AND ';
// MOD end


if ($id) {
	$sql .= " id = '$id'";
}
else {
// MOD Null time/stable date fix
	if($board_config['board_timezone'] < 12) {
		$sql .= " c.event_start > $this_date_unix ";
	}
	else {
		$time_adjust = 12 * 60 * 60;
		$sql .= " ((c.event_start >= '$this_date_unix' AND event_time_set >= 1)
			OR (c.event_start >= '". ($this_date_unix + $time_adjust) ."' AND event_time_set = 0)) ";
	}
	$sql .= "ORDER BY c.event_start";
}


$time_adjust = ($board_config['board_timezone'] >= 12) ? (12 * 60 * 60) : 0;
// MOD end
[center]***********************************************************
Alpinum.at - Forum f?r Bergfreunde
***********************************************************[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Und hier vor:

Code: Alles auswählen

$time_adjust = ($board_config['board_timezone'] >= 12) ? (12 * 60 * 60) : 0; 
noch ein

Code: Alles auswählen

$sql .= 'LIMIT X, Y';
und das Ziel wäre erreicht ;)

Okay, X und Y natürlich mit sinnvollen Werten füllen, wobei X der Start und Y die Anzahl der Datensätze wären...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
diegoriv
Beiträge: 314
Registriert: Di 01.Feb, 2005 15:25
Wohnort: Wien
Kontaktdaten:

Beitrag von diegoriv »

leider ist das ziel damit nicht erreicht:

eingebaut so

Code: Alles auswählen

	$sql .= "ORDER BY c.event_start";
}
$sql .= 'LIMIT 1, 3';

$time_adjust = ($board_config['board_timezone'] >= 12) ? (12 * 60 * 60) : 0;
ergibt:
Could not select Event data

DEBUG MODE

SQL Error : 1064 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 '1, 3' at line 6
[center]***********************************************************
Alpinum.at - Forum f?r Bergfreunde
***********************************************************[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ein Leerzeichen vor "LIMIT" wäre hier nicht übel ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
diegoriv
Beiträge: 314
Registriert: Di 01.Feb, 2005 15:25
Wohnort: Wien
Kontaktdaten:

Beitrag von diegoriv »

Bin ich jetzt schon völlig bescheuert???

1) Ich hab die Zeile aus deinem Posting kopiert
2) Ich hab jetzt versucht an allen möglichen und unmöglichen Stellen Leerzeichen einzufügen - kein Erfolg

??? :confused: :confused: :wall:
[center]***********************************************************
Alpinum.at - Forum f?r Bergfreunde
***********************************************************[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Direkt vor LIMIT, also so:

Code: Alles auswählen

$sql .= ' LIMIT 1, 3';
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
diegoriv
Beiträge: 314
Registriert: Di 01.Feb, 2005 15:25
Wohnort: Wien
Kontaktdaten:

Beitrag von diegoriv »

Aaaaaaaasoooo *lichtaufgeh*

jetzt begreif ich auch die logik hinter dem system. ist ja eigentlich völlig klar.

*aufdiebirneklatsch*

Vielen liebe Danke
[center]***********************************************************
Alpinum.at - Forum f?r Bergfreunde
***********************************************************[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Jo, keine Ursache.
Manchmal brauchst halt einen kleinen Schubser ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten