Database gegevens in tabel
Ik zit met hetvolgende probleem:
Ik heb een database met 2 tabellen.
In die tabellen staan namen. Deels dezelfde, maar er zijn ook die alleen in de eerste tabel voorkomen.
Ik wil graag een tabel afdrukken op een pagina, waarin alle namen naast elkaar worden afgedrukt. Dezelfde namen naast elkaar en naast de namen die alleen in de eerste tabel voorkomen een lege cel in de af te drukken tabel op het scherm.
Is dit mogelijk en zo ja, hoe dan?
Wat ik tot dusverre heb gezien is een tabel waarin de namen naast elkaar staan, maar waar de namen van de eerste tabel niet allemaal in staan omdat alleen alle namen van de tweede tabel zijn afgedrukt (bijv. 100) en de rest (bijv 50 van de 150) van de eerste tabel is niet afgedrukt.
De andere variant: alle namen worden afgedrukt, maar niet naast elkaar. Eerst (bijv. 150) in de linker cel en rechts niets en na de namen uit de eerste tabel, de namen uit de tweede tabel in de rechter cel. Niet ernaast maar eronder.
Hoe zien je mysql tabellen er uit, en wat heb je tot nog toe?
De info in de database is nogal gevoelig, dus die geef ik liever niet vrij, tenminste niet in dit forum. Is er een mogelijkheid om persoonlijk contact op te nemen?
+-------+
+Naam +
+-------+
+Jan +
+Josse +
+-------+
enz...
moet niet de echt info zijn verzin iets
doe met 1,2,3,.. en a,b,c,... ge begrijpt wel wa ik bedoel ;)
Quote:
De info in de database is nogal gevoelig, dus ...
Dus daar mag je niet tegen schelden...
Je moet echt meer info geven, de eerste keer dat ik deze topic las dacht ik echt dat het aan mij lag dat ik het niet snapte... en dan reageer ik maar niet...
Anderen hebben dat wellicht ook...
Elwin
Ik heb dus een database met daarin 2 tabellen met namen:
tabel 1: tabel 2:
+++++++ ++++++++
+ naam1 + + naam 2 +
+++++++ ++++++++
+ Jan + + Jan +
+ Karel + + Simon +
+ Simon + ++++++++
+++++++
Wat ik wil is een tabel maken in een HTML bestand dat er als volgt uitziet:
++++++++++++++++++
+ Naam1 + Naam2 +
++++++++++++++++++
+ Jan + Jan +
+ Karel + +
+ Simon + Simon +
++++++++++++++++++
De reden waarom is nu niet belangrijk.
Ik weet hoe ik de volgende tabellen moet maken:
while (list($naam1) = mysql_fetch_row ($result)AND list($naam2) = mysql_fetch_row ($result1)){
echo("<tr><td></td><td> $naam1 </td><td> $naam2 </td></tr>\n");
}
Dit geeft:
++++++++++++++++++
+ Naam1 + Naam2 +
++++++++++++++++++
+ Jan + Jan +
+ Karel + Simon +
++++++++++++++++++
Maar hier valt Simon dus weg (links) en dat is niet de bedoeling.
Een andere variant is:
while (list($naam1) = mysql_fetch_row ($result) OR list($naam2) = mysql_fetch_row ($result1)){
echo("<tr><td></td><td> $naam1 </td><td> $naam2 </td></tr>\n");
}
Dat geeft:
+++++++++++++++++++
+ Naam1 + Naam2 +
+++++++++++++++++++
+ Jan +
+ Karel +
+ Simon +
+++++++++++++++++++
+ Jan +
+ Simon +
+++++++++
Het enige verschil tussen deze codes is AND of OR tussen de LIST() opdrachten.
Ik hoop dat het zo iets duidelijker is. Misschien is het wel helemaal niet mogelijk, zoals ik het wil, ik ben net begonnen met PHP en MYSQL, maar ik stel de vraag toch maar.
Voor alle duidelijkheid, de codes kloppen want ik heb de namen uit de database gehaald en die kloppen. Daar ligt het dus niet aan. Het probleem zit hem in de manier waarop ik ze opvraag en de bewerkingen die ik er op loslaat.
Ik hoop dat iemand mij nu kan helpen. Mocht er nog iets onduidelijk zijn, laat het mij weten en ik zal proberen het te verduidelijken.
$query="SELECT * FROM users 1";
$query1="SELECT * FROM users 2";
Code (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
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
<?php
/* Ik ga er even vanuit dat de bovenkant van je tabel gemaakt is en dat je nu de resultaten kan laten zien.. Dus ergerns open je <table> en een rij met twee kolommen en je sluit die rij ook nog ergens...
*/
$query0 = mysql_query("SELECT * FROM users1");
while ($result0 = mysql_fetch_row($query0))
{
echo "<tr>\n"; // Nieuwe rij
echo "<td>$result0[0]</td>\n"; // $result0[0], die tweede 0 kan ook een één zijn, ligt aan je tabel
echo "<td>"; // Open je tweede kolom
// Kijken of de naam ook in de tweede kolom voorkomt
$query1 = mysql_query("SELECT * FROM users2 WHERE naam = '$result0[0]'"); // En die $result0[0] is dus dezelfde variabele als hierboven...
$num = mysql_num_rows($query1); // Tellen hoeveel namen er gevonden zijn
if ($num != "1") // Ik ga er maar weer vanuit dat je maximaal één record wilt hebben
{
echo " </td>\n"; // Vul je tweede kolom met eerste optie en sluit af
} else {
$result1 = mysql_fetch_row($query1);
echo "$result1[0]</td>\n"; // Die variabele kan natuurlijk ook een ander nummer hebben | Vul je tweede kolom met tweede optie en sluit af
}
echo "</tr>\n"; // De rij nog ff afsluiten
}
// En hier ergens nog even je tabel afsluiten...
?>
/* Ik ga er even vanuit dat de bovenkant van je tabel gemaakt is en dat je nu de resultaten kan laten zien.. Dus ergerns open je <table> en een rij met twee kolommen en je sluit die rij ook nog ergens...
*/
$query0 = mysql_query("SELECT * FROM users1");
while ($result0 = mysql_fetch_row($query0))
{
echo "<tr>\n"; // Nieuwe rij
echo "<td>$result0[0]</td>\n"; // $result0[0], die tweede 0 kan ook een één zijn, ligt aan je tabel
echo "<td>"; // Open je tweede kolom
// Kijken of de naam ook in de tweede kolom voorkomt
$query1 = mysql_query("SELECT * FROM users2 WHERE naam = '$result0[0]'"); // En die $result0[0] is dus dezelfde variabele als hierboven...
$num = mysql_num_rows($query1); // Tellen hoeveel namen er gevonden zijn
if ($num != "1") // Ik ga er maar weer vanuit dat je maximaal één record wilt hebben
{
echo " </td>\n"; // Vul je tweede kolom met eerste optie en sluit af
} else {
$result1 = mysql_fetch_row($query1);
echo "$result1[0]</td>\n"; // Die variabele kan natuurlijk ook een ander nummer hebben | Vul je tweede kolom met tweede optie en sluit af
}
echo "</tr>\n"; // De rij nog ff afsluiten
}
// En hier ergens nog even je tabel afsluiten...
?>
Elwin
Fantastisch. Het werkt precies zoals ik wilde. Nu moet ik precies proberen te begrijpen wat waar precies gebeurt. Maar daar kom ik wel uit. Hartstikke bedankt voor de moeite. Nu weet ik waar ik terecht kan wanneer ik weer problemen hebt. Ik hoop dat je dan weer kunt en wilt helpen. Nogmaals bedankt.
Maar wat er gebeurt in het script is vrij duidelijk:
1) Je haalt alle namen op uit de eerste tabel
2) Per resultaat (elke rij uit je query) maak je een rij in je tabel
3) Dan zet je in de eerste kolom van die rij de waarde die je met je query hebt opgehaald
4) Vervolgens haal je de gegevens uit de tweede database-tabel op waar de naam gelijk is aan de naam die we hebben
5) Dan tel je of er precies één resultaat is
6) Zo nee dan maak je een lege cel in de tweede kolom. Zo ja dan zet je die naam (uit stap 4) in de cel van de tweede kolom
7) Je sluit de gamaakte rij af
En stappen 2 t/m 7 worden voor elk resultaat uit je eerste rij herhaald...
Elwin
Nou is er een derde tabel in de database met daarin twee velden: een gebruiker en een code.
Elke gebruiker kan meerdere codes hebben. Bij elke naam1 (zie voorgaande) hoort 1 gebruiker. De ene naam1 is heeft echter 4 verschillende codes en de ander heeft er maar een. Voorbeeld van de gewenste tabel:
++++++++++++++++++++++++++++
+gebruiker+code+ naam1 +naam2 +
++++++++++++++++++++++++++++
+ 1 + 1 + Jan + Jan +
+ 1 + 2 + Jan + Jan +
+ 2 + 2 + Erik + +
+ 3 + 1 + Simon + Simon +
++++++++++++++++++++++++++++
Ik hoop dat je dit begrijpt.
Tabel 1 heeft "rechten", daarin zitten de velden "gebruikers" en "code". En de tabellen "naam1" en "naam2" blijven bestaan.
Weet je hier ook een oplossing voor? Ik hoop dat ik op je hulp kan rekenen.
gebruikerid int auto_increment,
naam varchar(200),
in_tabel1 tinyint(1),
in_tabel2 tinyint(1)
of in plaats van de laatste twee
tabelcode int(1)
Waarbij tabelcode 1 = tabel 1, tabelcode 2 = tabel 2, tabelcode 3 tabel 1&2, dit laat ik aan jouw fantasie over. Ik snap de grap niet van dezelfde info in twee tabellen zetten. Dit ziet er slecht en slap uit.
Grtz,
Arend
Met vriendelijke groet.
Wie heeft welke gebruikersnaam (staat dus in de eerste tabel, die met aanmeldingen voor de site), heet die persoon het forum bezocht (staat in de tweede tabel, die voor het forum), welke rechten heeft die persoon (staat in een andere tabel) en nog meer van dit soort gegevens.
De reden dat ik er niet meer uitkom is dan ook dat het overzicht heel snel verloren gaat, wanneer ik steeds die database door moet spitten voor 200+ namen. Ik hoop dat je het nu een beetje snapt. Nogmaals, vergeet alsjeblieft bovenstaand bericht, ik had je bericht verkeer begrepen. Sorry.
Met vriendelijke groet
gebruikerid int auto_increment,
gebruikersnaam varchar(200),
gebruikerswachtwoord varchar(20),
forum_bezocht tinyint(1),
kolommen_met_rechten,
Wanneer je overzicht wilt houden kan je het zelfde als "SELECT * FROM `tabel2`" gelijkstellen aan "SELECT * FROM `gebruikers` WHERE forum_bezocht = 1".
Dit is beter, omdat het minder ruimte inneemt, sneller is en je slaat niet twee keer dezelfde gegevens op. Bovendien kan je je vraagstelling dan simpel uitvoeren met -één- query.
Grtz,
Arend