[PHP/SQL] Meerdere getallen met meerdere getallen vergelijken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Dutch Boy

Dutch Boy

19/03/2011 15:39:18
Quote Anchor link
Beste leden,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
}
}

?>


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
 
PHP hulp

PHP hulp

22/12/2024 04:58:20
 
Noppes Homeland

Noppes Homeland

19/03/2011 15:48:24
Quote Anchor link
Ik weet niet hoor, maar zo te zien mis je alle kennis die je nodig hebt.

Verdiep je eens in SQL, het woord waar je dan eens op moet zoeken is JOIN
 

19/03/2011 15:50:16
Quote Anchor link
Dit doet mij toch heel erg vermoeden dat je databasemodel niet correct is. Geef eens meer info.
 
Jordi Kroon

Jordi Kroon

19/03/2011 15:54:43
Quote Anchor link
getallen buiten de quotes houden
selecteer wat je wilt geen *
Beter gebruik maken van tabs
 
Dutch Boy

Dutch Boy

19/03/2011 16:00:43
Quote Anchor link
@ Noppes Homeland
Wat bedoel je?

@ Karl Karl
Waar wil je meer info van?

@Jord
Waarom geen *, zo heb ik het geleerd, wat maakt het uit dan?
 
Noppes Homeland

Noppes Homeland

19/03/2011 16:01:52
Quote Anchor link
@Jordi, blijf nu eens weg uit topics waar je geen toegevoegde waarde bent en waar je zoal niet ingaat op de vraag van de TS.
-----------------------------
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
 
Dutch Boy

Dutch Boy

19/03/2011 16:03:05
Quote Anchor link
Oja karl,
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
 
Jordi Kroon

Jordi Kroon

19/03/2011 16:03:14
Quote Anchor link
Wat is hier nou geen toegevoegde waarde aan?
Een site moet veilig en goed zijn.
 
Dutch Boy

Dutch Boy

19/03/2011 16:06:56
Quote Anchor link
Zie mijn post hierboven, ik heb het duidelijk proberen te omschrijven ;)
 
Noppes Homeland

Noppes Homeland

19/03/2011 16:09:15
Quote Anchor link
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
Gewijzigd op 19/03/2011 16:19:47 door Noppes Homeland
 

19/03/2011 16:21:15
Quote Anchor link
Jordi kroon op 19/03/2011 16:03:14:
Wat is hier nou geen toegevoegde waarde aan?
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.
 
Dutch Boy

Dutch Boy

19/03/2011 16:28:13
Quote Anchor link
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


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.
 

19/03/2011 16:31:20
Quote Anchor link
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.
 
Dutch Boy

Dutch Boy

19/03/2011 16:39:46
Quote Anchor link
Nee, volgens mijn snap je het niet..

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.
 
Noppes Homeland

Noppes Homeland

19/03/2011 16:40:50
Quote Anchor link
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
 
Dutch Boy

Dutch Boy

19/03/2011 17:03:03
Quote Anchor link
Jah duh, omg xD..
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)
PHP script in nieuw venster Selecteer het PHP script
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)
PHP script in nieuw venster Selecteer het PHP script
1
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


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.. :(
 
Noppes Homeland

Noppes Homeland

19/03/2011 17:19:03
Quote Anchor link
Dus met andere woorden

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
 
Dutch Boy

Dutch Boy

19/03/2011 18:30:18
Quote Anchor link
@ Noppes
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']) . "'
 
Noppes Homeland

Noppes Homeland

19/03/2011 18:34:31
Quote Anchor link
In de tijdsduur van dit topic had je die query al lang kunnen hebben.

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
 
Dutch Boy

Dutch Boy

19/03/2011 20:57:30
Quote Anchor link
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
 
- SanThe -

- SanThe -

19/03/2011 21:00:34
Quote Anchor link
Is het bij jou dan al zomertijd?
Beiden tijdstippen heeft Noppes gepost.
 

Pagina: 1 2 volgende »



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.