[MySQL/PHP] Select query verbeteren met where clause

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16
Probleem:

Er wordt door de gebruiker een pagina gekozen. Het id van die pagina wordt doorgegeven aan een functie die er de juiste informatie bijhaalt. Dit werkt allemaal prima.
Alleen haalt deze query een een door PHP "serialized" array uit de db en geeft deze terug aan een while loopje:

PHP:
1
2
3
4
5
6
$pages = unserialize($result[0]["content_array"]);
while(list($key,$val) = each ($pages)) {

... doet zijn dingetje ....

}


Nu kunnen er in zo'n array welke honderd sub-id's zitten. Wat er nu gebeurd is dat er voor elk sub-id een select query afgevuurd wordt op de MySQL db om de daarbij behorende pagina op te halen.

Deze query:
PHP:
1
2
3
4
5
6
 $qry = "SELECT dat_t_navigatie.nav_id,
                        dat_t_navigatie.nav_naam,
                        dat_t_navigatie.nav_type,
                        dat_t_navigatie.nav_categorie
                 FROM  dat_t_navigatie
                 WHERE dat_t_navigatie.nav_id='$val'";


Vraag:

Het moet toch mogelijk zijn dit in 1 query op te lossen. Sub-selects zijn geen optie want de provider draait nog MySQL 3.12...

Gezocht op:
mysql.com
google.nl
GOT Search

... maar niets gevonden. :/

[ Voor 3% gewijzigd door Yo-han op 21-11-2003 13:41 . Reden: schoonheids foutje ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Waarom sla je die array ook als een array op in je DB, en maak je geen gebruik van een andere tabel om die waarden in te inserten. (Voor ieder array-element, een ander record)?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16
whoami schreef op 21 november 2003 @ 13:45:
Waarom sla je die array ook als een array op in je DB, en maak je geen gebruik van een andere tabel om die waarden in te inserten. (Voor ieder array-element, een ander record)?
Omdat er in verschillende "lagen" wordt gewerkt.

code:
1
2
3
4
5
6
7
8
9
laag1
---------------------
        sub1
        sub2
        sub3
        ----------------------
                   subsub 1
                   subsub2
                   enz.


elke pagina wordt in tabel A opgeslagen, en de bijbehorende array met subpagina's in tabel B.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Ga eens op zoek naar recursiviteit. Dat is namelijk een veel betere oplossing voor je probleem. Maak een tabel met: id-value-parentid en dan INNER JOIN over de 2 id's. Daarmee moet je het maar eens proberen. Array's in een veld zijn in ieder geval vies :Y)

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16
djluc schreef op 21 november 2003 @ 13:57:
Ga eens op zoek naar recursiviteit. Dat is namelijk een veel betere oplossing voor je probleem. Maak een tabel met: id-value-parentid en dan INNER JOIN over de 2 id's. Daarmee moet je het maar eens proberen. Array's in een veld zijn in ieder geval vies :Y)
Klopt, zo zou ik het ook gedaan hebben. Maar deze db is niet door mij gebouwd en probeer het dus eerst even met code op te lossen voordat ik straks een heel systeempje moet gaan omfixen...

Alleen kan je met id-value-parentid elke pagina maar 1 keer gebruiken. En elke pagina zou juist onder elke laag moeten kunnen hangen. Dat is volgens mij ook de reden dat er voor array's gekozen is.

[ Voor 17% gewijzigd door Yo-han op 21-11-2003 14:08 ]


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16
Ok even voor de mensen die dezelfde fout maken bij het opzetten van een database en mensen zoals ik daarmee veel werk bezorgen hierbij even een oplossing voor de search:


heb het volgende nu gedaan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--------------------|
Tabel_a            | 
--------------------|
a_id (unique)    |
naam                |
--------------------|

--------------------|
Tabel_b             | 
--------------------|
b_id (unique)    |
parent_id          |
c_id                   |
position             |
--------------------|

--------------------|
Tabel_c             | 
--------------------|
c_id (unique)    |
titel                   |
content             |
--------------------|


En bouw dan je menu met deze query op:

PHP:
1
2
3
4
5
6
// $parentid is het id van de pagina uit tabel_a
SELECT tabel_c.titel
FROM tabel_b
INNER JOIN tabel_c
ON tabel_c.c_id = tabel_b.c_id
WHERE tabel_b.parentid='$parentid'


Zover ben ik nu... ga nog even het een en ander verbeteren en dan alles omfixen... |:(
Pagina: 1