[php & mysql] efficientie *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Beste tweakers,

Ik ben bezig met een internetpagina die ik online wil kunnen aanpassen. Mijn site bestaat horizontaal uit 3 vlakken. Linker kolom, midden kolom en rechter kolom, deze kolomen bevatten ieder minimaal 1 hoofdonderwerp en een x aantal sub onderwerpen en ieder sub onderwerp kan weer een x aantal berichten kunnen hebben. Gelukkig zegt een link meer dan 1000 woorden dus ...
http://www.pc4fun.nl/oz/test/page01.htm

Nu wil ik de gegevens uit de database halen en deze dan op de site plaatsen. Op dit moment heb ik een werkende code maar zet echt mijn vraagtekens bij of dit niet efficienter kan of simpeler. Nu voer ik bijna 6 SQL statements uit om 1 pagina op te bouwen!

Hier onder mijn code

Wanneer nodig kan ik ook de sql tabellen ergens plaatsen.
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?
include("../functions/functions.php");
database_connect2();
    
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>
      Untitled Document
    </title>
    <meta http-equiv="Content-Type" content=
    "text/html; charset=iso-8859-1">
    <link href="../style.css" rel="stylesheet" type="text/css">
    <script language="JavaScript" type="text/JavaScript">
        <!--
                function MM_openBrWindow(theURL,winName,features) { //v2.0
            window.open(theURL,winName,features);
                }
        //-->
    </script>
  </head>
  <body>
    <table class="desktop">
      <tr>
        <td>
          <table class="columns" border="0" cellspacing="0"
          cellpadding="0">
            <tr>
              <td width="22%" valign="top">
                <table class="item" width="100%" border="0"
                cellpadding="0">
                  <?
                                         $query0 = "SELECT * FROM onderwerpen WHERE site_onderdelen_id = '1' AND position = 'links'";
                     $resultaat0 = mysql_query($query0);
                                         while ($rijen0 = mysql_fetch_row($resultaat0))
                     {
                                            echo "<tr>";
                                            echo " <td class=\"head1\"> $rijen0[2]<a href=\"#\" onclick=\"MM_openBrWindow('toevoegen_onderwerp.php?site_id=colomn_left','edit','toolbar=yes,status=yes,menubar=yes,resizable=yes,width=220,height=475')\">+++</a> = - </td>";
                      echo "</tr>";
                        
                                            $query1 = "SELECT * FROM sub_onderwerpen WHERE onderwerpen_id = '$rijen0[0]'";
                      $resultaat1 = mysql_query($query1);
                      while ($rijen1 = mysql_fetch_row($resultaat1))
                      {
                       echo "<tr>\n"; 
                       echo " <td class=\"head2\">$rijen1[2]</td>";
                       echo "</tr>";
                                             $query2 = "SELECT * FROM berichten WHERE sub_onderwerpen_id = '$rijen1[0]'";
                       $resultaat2 = mysql_query($query2);
                       while ($rijen2 = mysql_fetch_row($resultaat2))
                       {
                                                echo "<tr>";
                        echo " <td class=\"plat\">\n$rijen2[2]";
                        echo " </td>";
                        echo "</tr>";  
                       }
                                            }
                                         }    
                 ?>
                </table>
              </td>
              <td width="56%" valign="top">
                <table class="item" width="100%" border="0" cellpadding="0">
                <?
                                     $query4 = "SELECT * FROM onderwerpen WHERE site_onderdelen_id = '1' AND position = 'midden'";
                   $resultaat4 = mysql_query($query4);
                                     while ($rijen4 = mysql_fetch_row($resultaat4))
                                     {
                                        echo "<tr>";
                    echo " <td class=\"head1\"> $rijen4[2] <a href=\"#\" onclick=\"MM_openBrWindow('edit_table.php','edit','toolbar=yes,status=yes,menubar=yes,resizable=yes,width=460,height=475')\">+++</a>"; 
                    echo "</td>";
                    echo"</tr>";
                                        
                                        $query5 = "SELECT * FROM sub_onderwerpen WHERE onderwerpen_id = '$rijen4[0]'";
                    $resultaat5 = mysql_query($query5);
                    while ($rijen5 = mysql_fetch_row($resultaat5))
                    {
                     if( $rijen5[2] != "geen" )
                                         {
                                            echo "<tr>\n"; 
                        echo " <td class=\"head2\">$rijen5[2]</td>";
                        echo "</tr>";
                                         }
                                         $query6 = "SELECT * FROM berichten WHERE sub_onderwerpen_id = '$rijen5[0]'";
                     $resultaat6 = mysql_query($query6);
                     while ($rijen6 = mysql_fetch_row($resultaat6))
                     {
                                            echo "<tr>";
                      echo " <td class=\"plat\">\n$rijen6[2]";
                      echo " </td>";
                      echo "</tr>";  
                      }
                                        }
                                     }
                                    
                  ?>
                </table>
              </td>
              <td width="22%" valign="top">
                <table class="item" width="100%" border="0" cellpadding="0">
                   <?
                                         $query7 = "SELECT * FROM onderwerpen WHERE site_onderdelen_id = '1' AND position = 'rechts'";
                     $resultaat7 = mysql_query($query7);
                                         while ($rijen7 = mysql_fetch_row($resultaat7))
                     {
                                            echo "<tr>";
                                            echo " <td class=\"head1\"> $rijen7[2]<a href=\"#\" onclick=\"MM_openBrWindow('toevoegen_onderwerp.php?site_id=colomn_left','edit','toolbar=yes,status=yes,menubar=yes,resizable=yes,width=220,height=475')\">+++</a> = - </td>";
                      echo "</tr>";
                        
                                            $query8 = "SELECT * FROM sub_onderwerpen WHERE onderwerpen_id = '$rijen7[0]'";
                      $resultaat8 = mysql_query($query8);
                      while ($rijen8 = mysql_fetch_row($resultaat8))
                      {
                       echo "<tr>\n"; 
                       echo " <td class=\"head2\">$rijen8[2]</td>";
                       echo "</tr>";
                                             $query9 = "SELECT * FROM berichten WHERE sub_onderwerpen_id = '$rijen8[0]'";
                       $resultaat9 = mysql_query($query9);
                       while ($rijen9 = mysql_fetch_row($resultaat9))
                       {
                                                echo "<tr>";
                        echo " <td class=\"plat\">\n$rijen9[2]";
                        echo " </td>";
                        echo "</tr>";  
                       }
                                            }
                                         }    
                 ?>
                </table>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
  </body>
</html>


(p.s. volgens mij heb je wel IE 6.x nodig )

[ Voor 32% gewijzigd door Erpenator2 op 07-09-2003 12:23 . Reden: oops onderwerp vergeten! ]


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Kan iemand een onderwerp aan deze topic geven?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
Geef inderdaad je tabellen eens, lees de quickstart(staat in de FAQ) eens door, en probeer even te vertellen wat je query's doen. Welke gegevens je wilt hebben.

edit:Die titel veranderen ze vanzelf wel, verder hebben ze een edit knopje ;)

Leer verder eens indenten, gebruik enkele quotes in plaats van dubbele, dat scheelt een hoop \'s:
PHP:
1
echo 'een waarde met een citaat: "hallo" en een vaiable:'.$varnaam;

[ Voor 51% gewijzigd door djluc op 07-09-2003 12:25 ]


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
de sql tabellen staat op http://www.pc4fun.nl/oz/test/sql_website.txt

De eerste query haalt alle onderwerpen op van een deel van de site (de blauwe kopjes), de 2e query haalt alle sub onderwerpen op en plaatst ( de grijze kopjes in het voorbeeld) op het scherm de 3e query haalt alle berichten op die bij de sub onderwerpen horen. en dit proces herhaalt zich steeds voor iedere kolom

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 20:50
Van $query0, 4 en 7 zou je het volgende kunnen maken. En SELECT * kun je beter vervangen door SELECT enhierallekolommen, ennogeen, enzovoort:

PHP:
1
2
3
4
5
6
  $query = SELECT allekolomen, position 
                 FROM onderwerpen 
                 WHERE site_onderdelen_id = '1' 
                 AND position = 'rechts' 
                 OR position = 'links' 
                 OR position = 'midden';

[ Voor 20% gewijzigd door Sybr_E-N op 07-09-2003 12:30 ]


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
ik zal dat eens gaan doen met de quotjes, het is best irritant , maar ben dan ook nog een beetje aan het leren....

Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Zou het handig zijn om eerst alles 1 malig op te halen en vervolgens in arrays te zetten en dan steeds door de arrays te lopen? Of zijn goede sql statements sneller en minder belastend voor de server?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
Erpenator2 schreef op 07 September 2003 @ 12:29:
ik zal dat eens gaan doen met de quotjes, het is best irritant , maar ben dan ook nog een beetje aan het leren....
Op de manier waarop je het nu doet is het inderdaad gruwelijk irritant >:)
Overigens SQL doe ik meestal met bubbele quotes:
PHP:
1
$sql="SELECT veld1 FROM tabel WHERE id='".addslashes($_POST['id'])."'";

Dan hoef je ook niets te escapen met \'s.
Misschien is het handig om eens naar templates te gaan kijken, dan heb je bijna nooit problemen met quotes.

edit:probeer geen 2 reacties onder elkaar te zetten, als je wat toe te voegen hebt kun je je bericht gewoon even editten.

[ Voor 22% gewijzigd door djluc op 07-09-2003 12:33 ]


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Sybr_E-N schreef op 07 september 2003 @ 12:29:
Van $query0, 4 en 7 zou je het volgende kunnen maken. En SELECT * kun je beter vervangen door SELECT enhierallekolommen, ennogeen, enzovoort:

PHP:
1
2
3
4
5
6
  $query = SELECT allekolomen, position 
                 FROM onderwerpen 
                 WHERE site_onderdelen_id = '1' 
                 AND position = 'rechts' 
                 OR position = 'links' 
                 OR position = 'midden';
Wanneer ik dit doe kom ik toch nog in de problemen wanneer ik alles wil gaan afdrukken op het scherm? Het zal volgens mij per kolom moet gaan of heb ik het dan mis?

offtopic:
Ik zou graag templates willen gebruiken maar iedere poging die ik tot nu toe gedaan heb zijn mislukt. Ik heb er al vele site op na geslagen, maar wanneer ik weer wat aparts wil dan kom ik vast te zitten, en om nu iedere keer tweakers om hulp te vragen zie ik niet zitten. Maar mocht iemand me kunnen helpen.....

Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
je zou het met drie queries kunnen doen:
- query 1: SELECT * FROM onderwerpen WHERE site_onderdelen_id = '1' AND position = 'links'
- zet de id's van deze rijen door komma's gescheiden in een string $onderwerpenIDs (hint: implode())
- query 2: SELECT * FROM sub_onderwerpen WHERE onderwerpen_id IN ($onderwerpenIDs)
- zet de id's van deze rijen door komma's gescheiden in een string $subOnderwerpenIDs
- query 3: SELECT * FROM berichten WHERE sub_onderwerpen_id IN ($subOnderwerpenIDs)
- druk het geheel af, waarbij je nu wel geneste loops gebruikt zoals je nu met je queries doet.

[ Voor 6% gewijzigd door Apollo_Futurae op 07-09-2003 23:02 ]

Pas de replâtrage, la structure est pourrie.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
Erpenator2 schreef op 07 September 2003 @ 12:39:
offtopic:
Ik zou graag templates willen gebruiken maar iedere poging die ik tot nu toe gedaan heb zijn mislukt. Ik heb er al vele site op na geslagen, maar wanneer ik weer wat aparts wil dan kom ik vast te zitten, en om nu iedere keer tweakers om hulp te vragen zie ik niet zitten. Maar mocht iemand me kunnen helpen.....
offtopic:
Probeer een eenvoudige maar best goede zoals yapter eens: yapter.sourceforge.net Er staat een tutorial op www.phpfreakz.nl in het Nederlands. De basis is heel eenvoudig. Als je wat gekkere dingen wilt doen kun je altijd nog de manual er op na slaan.

Acties:
  • 0 Henk 'm!

Verwijderd

djluc schreef op 08 September 2003 @ 16:30:
[...]
offtopic:
Probeer een eenvoudige maar best goede zoals yapter eens: yapter.sourceforge.net Er staat een tutorial op www.phpfreakz.nl in het Nederlands. De basis is heel eenvoudig. Als je wat gekkere dingen wilt doen kun je altijd nog de manual er op na slaan.
offtopic:
Of Smarty gebruiken.... daar is ook ontzettend veel over te vinden en zit zeer goed in elkaar

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
Verwijderd schreef op 08 September 2003 @ 17:02:
offtopic:
Of Smarty gebruiken.... daar is ook ontzettend veel over te vinden en zit zeer goed in elkaar
offtopic:
Het voordeel aan Yapter is, als je templates niet begrijpt, want ze zijn heel eenvoudig, dat je Nederlandstalige informatie hebt. Overigens zou ik gaan voor XML/XSL omdat je dan niet alle kleine domme dingen meer in hoeft te programmeren. Die kleine dingen kun je heel eenvoudig in XSL oplossen, daardoor blijft het programmeren zuiverder.

Yapter is trouwens weer verder in ontwikkeling, er zijn een aantal nieuwe functies waardoor het steeds fijner gaat werken.

Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Mensen alvast heel erg bedankt voor de reacties. Ik zie veel mogelijkheden bij het stuk van apollo, hier ga ik dus even mee aan de slag. en zal zo snel mogelijk mn nieuwe code plaatsen

offtopic:
en natuurlijk ook met de templates
Pagina: 1