Parent & Childs

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander C

Sander C

14/07/2008 13:14:00
Quote Anchor link
Het lukt mij niet om eruit te komen. Een arrays met parent en childs..en ik werk met Smarty template, dus ik wil de structuur beetje zo'n orgineel houden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
      $i = 0;
      $query3 = mysql_query("select * from $categorietab,$lijsttab WHERE categorie_id=cat_id AND lijst_user_id=$zaakid GROUP BY categorie_id");
      while ($categorienaam = mysql_fetch_assoc($query3)) {
          $categorieid[$i] = $categorienaam;
          $i++;
      $sql="select * from $lijsttab,$artikeltab,$usertab,$categorietab,$artikelextratab WHERE categorie_id='".$categorieid."' AND lijst_user_id=user_id AND lijst_artikel_id=artikel_id AND categorie_id=cat_id AND lijst_extraitem_id=extra_id GROUP BY lijst_artikel_id";
      $query2 = mysql_query($sql);
      while ($brood = mysql_fetch_assoc($query2)) {
          $belegdebrood[$i] = $brood;
          $i++;
       }
      }


Het tonen van Bedrijfsnaam onder elkaar gaat het goed..alleen er wordt geen artikelen eraan gekoppeld. De database is genormaliseerd. De probleem ligt in het opvragen van categorieid.

De bedoeling dat het zo eruit moeten zien:

Bedrijfsnaam:
Artikel 1 | Aantal | Prijs
Artikel 2 | Aantal | Prijs
etc..

Bedrijfsnaam 1:
Artikel 1 | Aantal | Prijs
Artikel 2 | Aantal | Prijs

etc..
 
PHP hulp

PHP hulp

24/12/2024 19:20:59
 
Spike Spade

Spike Spade

14/07/2008 14:54:00
Quote Anchor link
Je query klopt niet. Er kunnen geen variabelen (beginnend met $) binnen de quotes staan.

Volgens mij zijn dit ook geen variabelen die je gebruikt, maar zijn dit gelijk je kollom namen, dus haal de dollartekens weg.

Verder raad ik aan om een join te gebruiken, zodat je maar 1 sql query hoeft te maken.

Ik kan dit niet voor je doen, aangezien ik je database structuur niet ken
 
Sander C

Sander C

14/07/2008 15:07:00
Quote Anchor link
Heb ook weer aangepast. Gebruik op dit moment de JOIN.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
      $i = 0;
      $sql = "SELECT r.*, rb.*,a.*  FROM $categorietab AS r INNER JOIN ($lijsttab AS rb INNER JOIN $artikeltab AS a ON a.artikel_id = rb.lijst_artikel_id) ON rb.categorie_id = r.cat_id AND rb.lijst_user_id=$zaakid ORDER BY r.cat_id";
     echo $sql;
      $query = mysql_query($sql);
      while ($rij = mysql_fetch_assoc($query)) {
      $categorieid[$i] = $rij;
      $i++;
      }

      $_SESSION['zaakid'] = $zaakid;
      $smarty->assign('categorieid', $categorieid);
      $smarty->assign('belegdebrood', $belegdebrood);
 
Terence Hersbach

Terence Hersbach

14/07/2008 15:20:00
 
Arend a

Arend a

14/07/2008 15:22:00
Quote Anchor link
Kan je even je datamodel tonen?
Zowiezo is je select query:
r.*
rb.*
a.*

niet erg handig. Het is sneller, en netter om expliciet de kolommen die je wil hebben te vragen.

Verder zijn de variabelen in je query erg lelijk en potentieel onveilig.
 
Sander C

Sander C

14/07/2008 15:32:00
Quote Anchor link
Ja, ik weet het..wil eerst even snelle informatie opvragen tot het alles werkt..daarna wordt de structuur beter ingedeeld.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
      $sql = "
       SELECT
       r . cat_id,
       r . cat_titel,
       rb . lijst_user_id,
       rb . lijst_artikel_id,
       rb . lijst_extraitem_id,
       rb . lijst_prijs,
       a . artikel_id,
       a . artikel_titel,
       ae . extra_id,
       ae . extra_titel
FROM categorie AS r
INNER JOIN (
bestellijstje AS rb
INNER JOIN artikel AS a ON a.artikel_id = rb.lijst_artikel_id
INNER JOIN artikel_extra AS ae ON ae.extra_id = rb.lijst_extraitem_id
) ON rb.categorie_id = r.cat_id
AND rb.lijst_user_id =1
GROUP BY rb.lijst_artikel_id, rb.categorie_id
      ";
//     echo $sql;
      $query = mysql_query($sql);
      while ($rij = mysql_fetch_assoc($query)) {
      $categorieid[$i] = $rij;
      $i++;
      }

      $_SESSION['zaakid'] = $zaakid;
      $smarty->assign('categorieid', $categorieid);


Krijg wel alle informatie die ik nodig hebt, maar de categorie wordt op elk regels getoond, terwijl ik aan 1 genoeg hebt.
 
Sander C

Sander C

14/07/2008 15:45:00
Quote Anchor link
De datamodel is:

categorie:
cat_id int(11)
cat_titel varchar(255)

bestellijstje:
lijst_id int(11)
lijst_user_id int(11)
lijst_prijs varchar(50)
lijst_artikel_id int(11)
lijst_extraitem_id int(11)
categorie_id int(11)

artikel:
artikel_id int(11)
artikel_titel varchar(255)

artikel_extra:
extra_id int(11)
extra_titel varchar(255)

En de user is de bekende usertabel met daarin user_id en user_login.
 
Spike Spade

Spike Spade

14/07/2008 15:47:00
Quote Anchor link
Even een tip. Probeer vanaf het begin altijd met goeie naamgevingen te werken. Eerst werkend maken en achteraf alles aanpassen is zoiezo dubbel werk, en word meestal niet gedaan. Zogauw het werkt wil je verder met het volgende.
 
Sander C

Sander C

14/07/2008 16:39:00
Quote Anchor link
Er hoeft hierop niet meer gereageerd worden. Het is inmiddels opgelost via Smarty forum.

Wel weet ik dat ik meer moeten leren over JOIN.

@Arend: Je schreef: potentieel onveilig.

Leg eens uit..waarom is het onveilig. De bedoeling is dat ik dit juist moeten leren om alles veilig te zijn.
 
Spike Spade

Spike Spade

14/07/2008 16:49:00
Quote Anchor link
Ik denk dat hij voornamelijk bedoeld dat je met dit soort onduidelijke variabelen snel de mist in kan gaan. En dus snel fouten maakt.
 
Nicoow Unknown

Nicoow Unknown

14/07/2008 17:19:00
Quote Anchor link
Niet alleen dat,
Je controleert ook nergens of je query is gelukt.
 
Spike Spade

Spike Spade

14/07/2008 19:09:00
Quote Anchor link
Dat mag je zeggen. Die catch viel me helemaal niet op
 
Jesper Diovo

Jesper Diovo

14/07/2008 20:12:00
Quote Anchor link
Kun je je oplossing misschien ook met de andere lezers delen? Misschien handig voor problemen in de toekomst :-).
 
Martijn B

Martijn B

14/07/2008 20:30:00
Quote Anchor link
Ik heb het topic niet helemaal goed doorgelezen. Ik las ergens parent/child, misschien heb je hier iets aan:

http://crisp.tweakblogs.net/blog/317/formatting-a-multi-level-menu-using-only-one-query.html
 
Sander C

Sander C

15/07/2008 08:52:00
Quote Anchor link
@Nico,

Ik controleer wel altijd op query door echoën, af en toe haal ik dat weg als ik bericht gaat plaatsen.

Voor deze oplossing had ik ander oplossing dat het ook goed werkt..alleen wordt het praktisch onhandig als je ieder keer nieuw categorie moeten toevoegen. Vandaar ik op deze idee kwam om parent/child methode te gebruiken.

Het kan best zijn dat soms iemand vastzit..door de hulp van medeprogrammeurs komt het altijd goed.
 
Sander C

Sander C

15/07/2008 08:58:00
Quote Anchor link
Jezpur schreef op 14.07.2008 20:12:
Kun je je oplossing misschien ook met de andere lezers delen? Misschien handig voor problemen in de toekomst :-).


Mag altijd..door medeprogrammeur hier op de forum Spike, die ook lid is van Smarty forum heeft voor mij grootste gedeelte oplossing opgelost.

Deze oplossing werkt alleen met Smarty template..de php code kan door iedereen wel gebruiken.

php code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
      $sql = "
       SELECT
       r . cat_id,
       r . cat_titel,
       rb . lijst_user_id,
       rb . lijst_artikel_id,
       rb . lijst_extraitem_id,
       rb . lijst_prijs,
       rb . categorie_id,
       a . artikel_id,
       a . artikel_titel,
       ae . extra_id,
       ae . extra_titel
FROM categorie AS r
INNER JOIN (
bestellijstje AS rb
INNER JOIN artikel AS a ON a.artikel_id = rb.lijst_artikel_id
INNER JOIN artikel_extra AS ae ON ae.extra_id = rb.lijst_extraitem_id
) ON rb.categorie_id = r.cat_id
AND rb.lijst_user_id =$zaakid
GROUP BY rb.lijst_artikel_id, rb.categorie_id
      ";
      $query = mysql_query($sql);
      while ($rij = mysql_fetch_assoc($query)) {
      $categorieid[$i] = $rij;
      $i++;
      }

      $_SESSION['zaakid'] = $zaakid;
      $smarty->assign('categorieid', $categorieid);
      $smarty->assign('category', $category);


Smarty template
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
{assign var=category value=""}
<table border=0 width=100% cellspacing=2 cellpadding=2>
   {foreach item=auct_det from=$categorieid}
      {if $category != $auct_det.cat_titel}
         {assign var=category value=$auct_det.cat_titel}
         <tr>
            <td colspan="3">
               <div style="font-size:13px; font-weight:bold; color: #ff0000">
                  <b>{$auct_det.cat_titel|capitalize}</b>
               </div>
            </td>
         </tr>
      {/if}
      <tr>
         <td>
            <a href="index.php?q=bestel&id={$auct_det.artikel_id}">{$auct_det.artikel_titel}</a>
         </td>
         <td valign=top>
            <a href="index.php?q=bestel&id={$auct_det.artikel_id}">Bestellen</a>
         </td>
         <td valign=top>
            <b>&euro; {$auct_det.lijst_prijs}</b>
         </td>
      </tr>
   {/foreach}
</table>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.