2 x while lus ofzo...

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
Om een lang verhaal kort te houden:
Ik ben gewoon stom geweest!
Ik dacht dat ik wel 2x $dezelfde-naam kon gebruiken in een WHILE lus...

NOT!

:)

Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
Ik heb het een beetje verward uitgelegd, maar ik bedoel dus het volgende:

Ik wil in een while-lus twee keer een query op mijn database doen.
De eerste keer om het Category-ID nummer op te halen dat bij het weer te geven item hoort, en de tweede keer om uit de Category-tabel de naam te query'en.

Ik had zoiets in gedachten, maar dat gaat niet:



mysql_connect("$DBHost","$DBUser","$DBPass");
$result=mysql("$DBName","SELECT * FROM items");
while ($row = mysql_fetch_row($result))

{


$ItemID=$row[0];
$Category=$row[1];
$ItemName=$row[2];

// En dan nu de categorie-naam:

$CN=mysql("$DBName","SELECT Category FROM category WHERE CategoryID='$Category'");
mysql_fetch_row($CN);
$CategoryName=$row[0];

// einde naam...

echo "Hier alle zooi die uit de db getrokken is...";



} //einde while-lus

Acties:
  • 0 Henk 'm!

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 16-08 06:44

CyberSnooP

^^^^ schrijft --->

SELECT items.*, categories.Category FROM items LEFT JOIN categories ON categories.Category = items.Category;

De query die hierboven staat levert dus naast de 'oude' velden nog een extra veld op die de categorynaam haalt uit de tabel categories. Als je meer info over de JOIN-query wilt hebben, lees dan gewoon de manual van MySQL.

Je hebt op deze manier dus maar 1 while-lus nodig, en je doet slecht 1 query (snelheidswinst).

Wat vreemd is, is dat je in je uitleg de tabel met de categorieën 'categories' noemt, en in je code de tabel 'category' wordt genoemd! Ik ben maar uit gegeaan van 'categories'.

|_____vakje______|


Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
Excuseer:

Het volgende:

Table: ITEMS
Fields: ItemID (bigint 20)
Category (bigint 20)
ItemName (varchar)
enz....

Table: CATEGORY
Fields: CategoryID (bigint 20)
Category (varchar)

Dus die ITEMS.Category is het ID van CATEGORY.CategoryID.
De naam die ik moet hebben is dus CATEGORY.Category...

Hmmm, ik zal wel wat proberen...

Acties:
  • 0 Henk 'm!

  • johnwoo
  • Registratie: Oktober 1999
  • Nu online

johnwoo

3S-GTE

Gaat het niet sneller als je eerst een array bouwt die de categorie-nummers naar de categorie-namen mapt, en dan later bij het displayen van de items ff in die array opzoekt welke naam de categorie heeft?
Of begrijp ik je soms verkeerd? Ik denk dat dat sneller is dan een join...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan wel een while lus in een while lus gebruiken. De fout zit hem in de variabele $result je slaat allebij de resultaten van je queries op in deze variabele waarmee je dus in de ene while lus het result van je vorige query overschrijft. Noem die ff $result2 ofzo.

Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
Ik moet CyberSnooP bedanken voor zijn posting!

Dus bij deze: DANKJEWEL!

Ik heb nu:<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>SELECT items.*,category.Category FROM items LEFT JOIN category ON category.CategoryID=items.Category[/quote]Een heel mondje vol syntax, maar het werkt wel :-)

Hij gooit er nu een extra row bij (ik gebruik mysql_fetch_row) met die categorie-namen die ik gedefinieerd heb in mijn tabel CATEGORY.

Ik wist nog niets van die LEFT JOIN af, een vaag iets, maar wel handig.

Btw:

[snelders]

Ik heb al een keer geprobeerd die naam te veranderen, maar dat werkte niet.
Ik had toen zoiets:<BLOCKQUOTE><font size=1 face=Verdana, Arial, Helvetica>quote:</font><HR>while ($row = mysql_fetch_row($result))
{
$ItemID=$row[0];
$Category=$row[1];

bla...

mysql(en weer een query)

while ($blaat = mysql_fetch_row($CatNaam))
{
blaat
}
}[/quote]Maar dat schijnt niet te werken (of ik kan gewoon geen PHP)

Thanks Y'All!

Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
[snelders]

XCuse ME, ik kan dus geen PHP!

Je hebt gelijk, je kunt dus wel 2 while-lussen gebruiken!

Maar ik had die $result wel veranderd, maar niet die $row!!

Als ik die verander naar $whatever doet 'ie het idd WEL!

Iig bedankt voor je reactie...
Pagina: 1