[PHP/SQL] Meerdere getallen met meerdere getallen vergelijken
Ik ben heel lang bezig geweest, maar tevergeefs kom ik er niet uit :(
Mijn vraag:
Hoe kan je meerdere getallen uit een sql kolom met meerdere getallen uit een andere kolom vergelijken? Let wel op, dat wanneer kolom 1 met kolom 2 vergeleken moet worden: dat alle getallen/opties van kolom 1 op volgorde met kolom 2 worden vergeleken.
Voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql_kolom1 = mysql_query("SELECT * FROM getal1 WHERE userid = '1'");
while($row_kolom1 = mysql_fetch_assoc($sql_kolom1){
$sql_kolom2 = mysql_query("SELECT * FROM getal2 WHERE userid = '1'");
while($row_kolom2 = mysql_fetch_assoc($sql_kolom2){
if($row_kolom1['id1'] == $row_kolom2['id2']{
// code hier
}
}
}
?>
$sql_kolom1 = mysql_query("SELECT * FROM getal1 WHERE userid = '1'");
while($row_kolom1 = mysql_fetch_assoc($sql_kolom1){
$sql_kolom2 = mysql_query("SELECT * FROM getal2 WHERE userid = '1'");
while($row_kolom2 = mysql_fetch_assoc($sql_kolom2){
if($row_kolom1['id1'] == $row_kolom2['id2']{
// code hier
}
}
}
?>
Dit heb ik zelf ff snel gecodeerd zodat jullie beter snappen wat ik bedoel. Ik kom echter tegen een probleempje aan, aangezien hij zo NIET alle getallen van kolom1 1 voor 1 vergelijkt met alle getallen van kolom2 :$
Gewijzigd op 19/03/2011 15:39:43 door Dutch Boy
Verdiep je eens in SQL, het woord waar je dan eens op moet zoeken is JOIN
Dit doet mij toch heel erg vermoeden dat je databasemodel niet correct is. Geef eens meer info.
selecteer wat je wilt geen *
Beter gebruik maken van tabs
Wat bedoel je?
@ Karl Karl
Waar wil je meer info van?
@Jord
Waarom geen *, zo heb ik het geleerd, wat maakt het uit dan?
-----------------------------
Dutch Boy moet gewoon duidelijk uitleggen wat z'n probleem is, want tekstueel beweert hij dat hij een situatie heeft:
tabel a met veld id1 waarin is opgeslagen is 1,3,2,5
tabel b met veld id2 waarin is opgelsagen is 5,7,2,4,9
En uiteraard is het opslaan van meerdere getallen gescheiden door een seperator in 1 kolom uit den boze - zo fout als het maar zijn kan -.
maar uit de pseudo code kan je dat niet opmaken, daar doet ie net of id1 en id2 1 waarde bevat, dus dan kan je je weer de vraagstellen wat z'n probleem is.
----------
Geen * gebruiken omdat het nu eenmaal overzichtelijker is om de velden te benoemen waarin de info opgeslagen hebt die je op dat moment nodig hebt. Haal je ook geen overbodige informatie op en kom je in feite ook niet in de knoop met veld/alias benamingen
Gewijzigd op 19/03/2011 16:05:50 door Noppes Homeland
er valt niet meer te zeggen dan dit:
Ik heb 2 tabels in mn SQL, 1tje tabel a en 1tje: tabel b.
In tabel a zit een veld genaamd velda hierin zitten allemaal getallen van bv. 1 tm 20
in tabel b zit een veld genaamd veldb hierin zitten allemaal getallen van bv 1 tm 334
Wat ik nu dus wil is: de getallen uit tabel a 1 voor 1 vergelijken met de getallen van tabel b.
Dus: 1 vergelijken met 1 tm 334
vervolgens 2 vergelijken met 1 tm 334
etc..
Gewijzigd op 19/03/2011 16:06:31 door Dutch Boy
Een site moet veilig en goed zijn.
Zie mijn post hierboven, ik heb het duidelijk proberen te omschrijven ;)
1 veld vertegenwoordigd 1 waarde
-------------------------
maar als je dat niet begrijpt dan moet je eens kijken naar:
http://www.php.net/explode
http://www.php.net/array_search
En er zijn dan nog wel meer oplossingen maar die vallen waarschijnlijk buiten je kennis bereik
Gewijzigd op 19/03/2011 16:19:47 door Noppes Homeland
Jordi kroon op 19/03/2011 16:03:14:
Wat is hier nou geen toegevoegde waarde aan?
Een site moet veilig en goed zijn.
Een site moet veilig en goed zijn.
We zijn nog niet in dat stadium beland. Eerst moet die database in orden zijn. Dat is nu dus nog niet het geval.
Dutch Boy heeft mij (en Noppes) nog niet overtuigd waarom de database zo zou moeten zijn. Volgens mij gebeurd dat ook niet meer.
Noppes Homeland op 19/03/2011 16:09:15:
We komen terug op hetgeen Karl gepost heeft, je dient je database te normaliseren
1 veld vertegenwoordigd 1 waarde
-------------------------
maar als je dat niet begrijpt dan moet je eens kijken naar:
http://www.php.net/explode
http://www.php.net/array_search
En er zijn dan nog wel meer oplossingen maar die vallen waarschijnlijk buiten je kennis bereik
1 veld vertegenwoordigd 1 waarde
-------------------------
maar als je dat niet begrijpt dan moet je eens kijken naar:
http://www.php.net/explode
http://www.php.net/array_search
En er zijn dan nog wel meer oplossingen maar die vallen waarschijnlijk buiten je kennis bereik
Te normaliseren? En dat is... ?
en met array search en explode had ik al geprobeerd..
Niemand die weet hoe je veld1 met 10 kolommen met: 1 tm 10, op volgorde met veld2 met 800 kolommen met de waardes: 1 tm 800 vergelijkt?
dus 1 met 1
1 met 2
1 met 3
1 met 4 etc.. tot 1 met 800
en dan 2 met 1 , 2 met 2 , etc.. 2 met 800, etc.
Databasenormalisatie.
Niemand geeft een specifiek antwoord aangezien wij denken dat wat je hebt niet klopt. Stel, je wilt per dag het aantal auto's wat ergens langs rijd weten, dan moet je het aantal auto's opslaan. Wat jij dan zou doen is het aantal personen opslaan. Oftewel, je slaat het niet goed op.
Niemand geeft een specifiek antwoord aangezien wij denken dat wat je hebt niet klopt. Stel, je wilt per dag het aantal auto's wat ergens langs rijd weten, dan moet je het aantal auto's opslaan. Wat jij dan zou doen is het aantal personen opslaan. Oftewel, je slaat het niet goed op.
Doel:
Een negeer optie voor mijn berichtenbox.. =]
Dus daarom moet ik waardes(userid's) met elkaar vergelijken om te kijken of de id op de negeerlijst staat etc.
Quote:
en met array search en explode had ik al geprobeerd..
Oke, dan weten we dus ook gelijk, dat je geen eens begrijpt van wat er op php.net te lezen valt.
Misschien dat je dat freubel stukje aan code eens kan posten, kunnen enkele onder ons jouw misschien wel uitleggen wat je fout doet.
----------------------
Je begrijpt uiteraard wel dat je niet in de user/gebruikers tabel een veld moet opnemen waarin je allemaal user_ids gaat opslaan welke jij wilt negeren voor welk doeleinde dan ook.
een negeerlijst tabel kan er als volgt uitzien:
user_id | negeer_user_id
Gewijzigd op 19/03/2011 16:49:36 door Noppes Homeland
Dat heb ik allang
Oke ik ga het heel duidelijk uitleggen:
Tabel: block >> user_id | blocked_id
Tabel: pm >> van | naar
toelichting: in 'van' staat de userid van de user die de bericht verstuurd.
in 'naar' staat de userid van de user waar hij naar toe moet.
Ik wil dus dat hij eerst alles geblockte ids gaat pakken bij tabel block en dan veld user_id vandaar:
Code (php)
1
$sql_blocked = mysql_query("SELECT * FROM block WHERE user_id = '".mysql_real_escape_string($get_data['id'])."'");
Dus daarmee kijkt hij bij al zijn eigen user_id's met de bijbehorende blocked_id
Vervolgens moet er dus gekeken worden of het bericht van blocked_id komt, zo ja dan word hij dus niet weergeven..
Dus iets van:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
for ($i=1; $i<=$lastid; $i++){
$sql_blocked = mysql_query("SELECT * FROM block WHERE user_id = '".mysql_real_escape_string($get_data['id'])."'");
$row_blocked = mysql_fetch_assoc($sql_blocked);
while($row = mysql_fetch_assoc($sql)){
if($row_blocked['blocked_id'] != $row['van']){
// id staat niet op negeerlijst dus word gewoon weergeven
$sql_blocked = mysql_query("SELECT * FROM block WHERE user_id = '".mysql_real_escape_string($get_data['id'])."'");
$row_blocked = mysql_fetch_assoc($sql_blocked);
while($row = mysql_fetch_assoc($sql)){
if($row_blocked['blocked_id'] != $row['van']){
// id staat niet op negeerlijst dus word gewoon weergeven
Ik hoop dat jullie mij nu wel snappen xD..
Ps. Ik heb al geprobeerd om beide in while te zetten en loop heb ik geprobeerd, heb echt van alles geprobeerd, maar uitkomst is dan altijd: hij neemt alleen de eerste blocked_id , dus alleen berichten van de eerste blocked_id laat hij niet zien, terwijl een userid bijv 10 rijen heeft. Dus de 2e rij werkt al niet.. :(
als pm.van voorkomt in block.blocid_id waarbij pm.naar gelijk is aan block.user_id dan is het foute boel
Wat loop je dan te kloten met php, je kan daar gewoon 1 query voor opstellen.
en dan zijn we terug bij mijn eerste post
Gewijzigd op 19/03/2011 17:19:55 door Noppes Homeland
Klopt
En als het zo makkelijk is, wat wordt het dan >.< ?
Toevoeging op 19/03/2011 18:31:07:
zoiets? :
SELECT * FROM block WHERE user_id = '" . mysql_real_escape_string($get_data['id']) . "' AND blocked_id = '" . mysql_real_escape_string($row['van']) . "'
Het een en ander staat bijna letterlijk uitgeschreven in post van dd: 19/03/2011 17:19:03 en post dd: 19/03/2011 15:48:24
doe er wat mee zal ik zeggen
Lol ik weet niet of je goed oplet of niet, maar die tijdstip heb ik wat gepost en dat is mijn code >.< Was vorige code hierboven (mn Ene laatste post) nou goed ofzo
Beiden tijdstippen heeft Noppes gepost.