Menü

  Login

  Shoutbox

  Forum » Fragen zu Ilch » Andere Dinge » Sitelink nach Ergebnis aus 3 Abfragen


Sitelink nach Ergebnis aus 3 Abfragen
CodeRon
Jungspund

User Pic

Posts: 25
# 30.07.2010 - 21:49:05
    zitieren



Hallo Mairu und auch an alle anderen die mir bei meinem Problem helfen könnten!

Ich bin (mal wieder) bei für einen Kunden ein Modul zu erstellen!

Hierbei handelt es sich um eine Art Verkaufsmodul.
Nun zu meinem Problem:

Ich habe 3 mögliche Stadien wo sich ein Artikel befinden kann, diese frage ich aus der datenbank ab. Unterschieden wird ein eingestellter Artikel anhand eines eingetragenen Status. Ich möchte nun nach einem bestimmten Limit, wenn alle drei Stadien zusammen gezählt werden, das er dann eine weitere Seite generiert! Kann man das über die Funktion db_make_sites verwirklichen?

Wenn jemand für mich einen Lösungsansatz hat, kann der diesen gerne verratenZwinker
Mairu
Administrator

User Pic

Posts: 1908
# 30.07.2010 - 22:11:47
    zitieren



Ich denke schon, weißt du nicht wie du generell mit db_make_sites umgehst, oder nur in dem speziellen Fall, hast du ggf. schon selbst angefangen und weißt nur nicht weiter, ggf. Code posten.
CodeRon
Jungspund

User Pic

Posts: 25
# 30.07.2010 - 22:26:07
    zitieren



Ja, ich habe schon selber angefangen und auch schon rumprobiert! Soweit komme ich mit db_makes-sites zurecht, nur in diesem Falle irgendwie nicht ganz soZwinker

Hier mal den Code bisher:
 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:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
  <?php
$title 
$allgAr['title'].'Meine Verkäufe';
$hmenu 'Meine Verkäufe';
$design = new design $title $hmenu );
$design->header();

$limit 10;
$page = ($menu->getA(1) == 'p' $menu->getE(1) : 1);
$MPL db_make_sites ($page "WHERE instatus = 3 + instatus = 4 + instatus = 5 AND userid = ".$_SESSION['authid']."" $limit "?artselled" 'auv_artikel' );
$anfang = ($page 1) * $limit;

$tpl = new tpl 'artselled.htm' );
$tpl->set_out('SITELINK',$MPL,0);

$vart db_query("SELECT id, title, price, DATE_FORMAT(addtime,'%d.%m.%Y') as datum FROM prefix_auv_artikel WHERE instatus = 3 AND userid = ".$_SESSION['authid']." ORDER BY addtime DESC LIMIT ".$anfang.",".$limit);
if ( 
db_num_rows($vart) == ) {
    echo 
'- Sie haben kein offenen Artikel oder haben noch kein eingestellt! -';
}else{
while(
$row db_fetch_assoc($vart) ) {
    
$row['aid'] = '-'.$row['id'];
    if (
ereg(","$row['price'])) {
       
$row['vprice'] = $row['price'].'€';
       }else{
       
$row['vprice'] = $row['price'].',00€';
       }
    
$tpl->set_ar_out($row,1);
}
}
$tpl->out(2);

$avart db_query("SELECT id, title, price, DATE_FORMAT(atime,'%d.%m.%Y') as adatum FROM prefix_auv_artikel WHERE instatus = 4 AND userid = ".$_SESSION['authid']." ORDER BY atime DESC LIMIT ".$anfang.",".$limit);
if ( 
db_num_rows($avart) == ) {
    echo 
'- Es wurde noch kein Artikel von Ihnen archiviert! -';
}else{
while(
$row db_fetch_assoc($avart) ) {
    
$row['aid'] = '-'.$row['id'];
    if (
ereg(","$row['price'])) {
       
$row['aprice'] = $row['price'].'€';
       }else{
       
$row['aprice'] = $row['price'].',00€';
       }
    
$tpl->set_ar_out($row,3);
}
}
$tpl->out(4);

$vkart db_query("SELECT id, title, price, DATE_FORMAT(ktime,'%d.%m.%Y') as kdatum FROM prefix_auv_artikel WHERE instatus = 5 AND userid = ".$_SESSION['authid']." ORDER BY ktime DESC LIMIT ".$anfang.",".$limit);
if ( 
db_num_rows($vkart) == ) {
    echo 
'- Sie haben noch kein Artikel auf e-Mada verkauft! -';
}else{
while(
$row db_fetch_assoc($vkart) ) {
    
$row['aid'] = '-'.$row['id'];
    if (
ereg(","$row['price'])) {
       
$row['kprice'] = $row['price'].'€';
       }else{
       
$row['kprice'] = $row['price'].',00€';
       }
    
$tpl->set_ar_out($row,5);
}
}
$tpl->out(6);



$design->footer();
?>
Mairu
Administrator

User Pic

Posts: 1908
# 31.07.2010 - 09:41:32
    zitieren



Du hast da jeweils ein + zwischen den instatus = X Bedingungen, da müsste denke ich ein OR hin, es soll ja ein oder sein oder?
CodeRon
Jungspund

User Pic

Posts: 25
# 31.07.2010 - 23:20:22
    zitieren



Ja also mit OR hatte ich gestern auch schon probiert und habe mir es eben auch nochmal angeschaut! Funktioniert irgendwie nicht so!
Nur zu Erklärung:
Ich habe mir zum testen 2 Artikel angelegt und mit den Bedingungen versehen! Wenn ich nun OR dazwischen setze und das Limit auf 2 dann gibt mir der SITELINK komischerweise 6 Seiten aus!
Nun habe ich noch die Möglichkeit mit AND dazwischen probiert! Dort zeigt er mir bei einem Limit von 2 keinen SITELINK an, was anscheinend richtig ist, auch wenn ich die beiden Testartikel auf zwei verschiedene Stadien aufteile kommt kein nichts! Als ich dann das Limit auf 1 gesetzt habe, hat er mir aber auch kein SITELINK angezeigt, obwohl er ja auch nur 1 Artikel anzeigt, wenn ich beide in einem Status habe!
Mairu
Administrator

User Pic

Posts: 1908
# 01.08.2010 - 14:16:43
    zitieren



Mhh also OR für oder ist schon richtig, denn ein Eintrag kann nur einen bestimmten Wert haben und nicht gleichzeitig mehrere, weshalb AND (und) auf jeden Fall falsch ist, und immer auf 0 Seiten kommt und deswegen kein Sitelink angezeigt wird.
In deinem Fall muss einfach nur noch eine Klammer um die Oder Bedingungen gesetzt werden, weil danach noch andere, im speziellen ein AND folgt, also

 Php
1:
  $MPL db_make_sites ($page "WHERE (instatus = 3 OR instatus = 4 OR instatus = 5) AND userid = ".$_SESSION['authid']."" $limit "?artselled" 'auv_artikel' );

Andere Möglichkeit bei vielen Werten ist die Angabe einer Menge
 Php
1:
  $MPL db_make_sites ($page "WHERE instatus IN (3,4,5) AND userid = ".$_SESSION['authid']."" $limit "?artselled" 'auv_artikel' );


Es sollte beide Möglichkeiten gleich funktionieren.
CodeRon
Jungspund

User Pic

Posts: 25
# 01.08.2010 - 16:23:57
    zitieren



Danke Mairu,

das wars natürlich, habe das in Klammer setzen garnicht bedacht!

Jetzt gibt es aber ein anderes Problem. Solange meine Testartikel in einem Status sind und ich das Limit von 1 drin habe, zeigt er mir auch ganz brav an das es eine zweite Seite gibt, wo dann der zweite Artikel aufgelistet ist! Wenn ich aber die 2 Testartikel auf zwei Stadien aufteile, müsste er mir den einen auf der ersten Seite anzeigen und den zweiten auf der zweiten Seite, was er aber nicht macht. Er zeigt mir alle beide Artikel auf der ersten Seite an und hat logischerweise trotzdem den Sitelink mit 2 Seiten angezeigt! Ich denke mal das liegt sicher daran das ich ja das Limit in allen 3 Abfragen mit einbauen muss und so dann jeder Status das Limit von 1 hat, was erklären würde das er mir beide auf einer Seite anzeigt!
Mairu
Administrator

User Pic

Posts: 1908
# 01.08.2010 - 20:01:24
    zitieren



Nein das liegt hauptsächlich am Prinzip von Sitelinks, die einfach nur schaut wie viele verschiedene Einträge es in der Datenbank gibt, je nachdem welche Abfrage man schreibt, die Logik der Abfrage kann die Funktion aber nicht wissen, sie schaut einfach nur nach der Gesamtzahl und teilt diese durch die Einträge, die pro Seite angezeigt werden soll, und je nachdem zeigt es dann den Sitelink mit der errechneten Anzahl von Seiten an.

Du willst aber wohl was anderes, wenn ich es richtig verstehe, so dass du eigentlich für jeden Status einen Eintrag/Link haben willst, der nur dann da ist, wenn es auch ein Artikel mit diesem Status gibt, oder?

(in den Seiten für einen Status kann man dann auch eigene Sitelinks anzeigen)
CodeRon
Jungspund

User Pic

Posts: 25
# 01.08.2010 - 20:28:30
    zitieren



Naja eigentlich wollte ich schon sowas in der Art wie die Sitelinks!

Ist evtl. ein wenig kompliziert erklärt.

Ich möchte es eigentlich so haben, das es nach einer bestimmten Anzahl (LIMIT) von Artikeleinträgen, zusammengezählt von allen 3 Stadien, eine neue Seite gibt wo dann die restlichen zusehen sind.

Sagen wir mal ich habe ein Limit von 25 Einträgen!
Wenn ein Status 26 Einträge hat und die anderen beiden kein, dann würde es ja funktionieren. Wenn ich jetzt aber diese 26 Einträge auf die 3 Stadien aufteile, z.b. 10 haben den Status 1, 7 haben den Status 2 und 9 Artikel haben den Status 3, dann sollte er aber auch den einen der laut LIMIT (25) zuviel wäre auf der nächsten Seite anzeigen!

Ich weiß, reden und wollen ist die eine Seite, das so hinzubekommen die andere!