Sql Code

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Opleidingstraject tot Low Code Developer Cross Bor

Opleidingstraject tot Low Code Developer Cross Border Solutions Den Haag HBO/WO IT Professional "Wij zetten Mendix en E-magiz in voor onze kritieke processen om de favoriete bezorger te zijn. We zoeken hiervoor Developers in spe die gaat leren ontwikkelen in Mendix en E-magiz voor het uitbreiden van onze Cloud IT-platformen en softwareoplossingen voor onze belangrijkste internationale klanten. Dit vraagt om analytisch vermogen, creativiteit, klantgerichtheid en uitstekende communicatie skills". Wat ga je doen? Als onze nieuwe Junior Developer word je onderdeel van de digitale transformatie van onze internationale business unit naar een e-commerce dienstverlener. PostNL’s cross border unit (CBS) groeit in snel tempo

Bekijk vacature »

Steen

steen

25/04/2009 17:55:00
Quote Anchor link
Met welke query is het mogelijk om het volgende te doen:
Ik heb een tabel met duidenden records, nu wil ik dat hij alleen de gebruikers weergeeft die meer dan vier keer in de database voorkomen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
id | gebruikersnaam
------------------
1 | steen
2 | steen
3 | steen
4 | steen
5 | anders
6 | steen


Nu moet de query 'steen' wel ophalen, maar 'anders' niet.
 
PHP hulp

PHP hulp

10/05/2021 21:16:00
 
Timen kut

Timen kut

25/04/2009 17:56:00
Quote Anchor link
COUNT?
 
Midas

Midas

25/04/2009 18:41:00
Quote Anchor link
Waarom wil je dit? Volgens mij klopt je datamodel niet.
 
Harry

Harry

25/04/2009 19:16:00
Quote Anchor link
Misschien niet de beste methode... maar hij werkt wel...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
27
28
29
30
$dt = 0;
$sql = "SELECT id FROM tabel";
$sql_result = mysql_query($sql) or die("Kan gegevens niet verwerken1");
while($data = mysql_fetch_row($sql_result))
{
    $dt = $dt + 1;
    $alle_ids[$dt] = strtolower($data[0]);
}

// filteren multiples
for($c = 2; $c <= $dt; $c++) // start met de tweede string
{
    for($f = 1; $f < $c; $f++) // controleer of er voorgaand een multiple is
    {
        if($alle_ids[$c] == $alle_ids[$f]) // zo ja...
        {
            unset($alle_ids[$c]); // maak leeg!
        }
    }
}

// opslaan gefilterde ids
for($lz = 1; $lz <= $dt; $lz++)
{
    if($alle_ids[$lz]) // opslaan wanneer een waarde bevat
    {
        $sql = "INSERT INTO anderetabel (id) VALUES ('$alle_ids[$lz]')";
        $sql_result = mysql_query($sql) or die ("Kan gegevens niet verwerken2");
    }
}


Hoewel ik daar niet zeker van ben met grote aantallen... :-(

Harry
Gewijzigd op 01/01/1970 01:00:00 door Harry
 
Noppes

Noppes

25/04/2009 19:41:00
Quote Anchor link
De opmerking over dat databasemodel niet klopt trek ik in twijfel. Het slaat namenlijk nergens op. Het enige wat er aan scheelt is `waarom` kunnen er in de tabel `dubbele` records op het veld gerbuikersnaam geinsert worden.

En wat Harry gepost heef dat is helemaal van de tandjes, je kan met 1 sql statement voor het een en ander zorg dragen.
 
Stien ss

stien ss

25/04/2009 19:54:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
SELECT username, COUNT(username) AS num_users
FROM table
GROUP BY table.username
HAVING num_users > 4
?>


Zoiets?
 
Steen

steen

25/04/2009 20:06:00
Quote Anchor link
Waarom zou het datamodel niet kloppen? Denk maar aan posts, wanneer je alleen de gebruikers met meer dan bijvoorbeeld 500 posts wilt laten zien heb je ongeveer hetzelfde nodig als waarnaar ik vraag. Volgens mij komt stien het dichtst in de buurt, even uitproberen.
 
GaMer B

GaMer B

25/04/2009 20:10:00
Quote Anchor link
Ik zou eerder de userID opslaan, in plaats van de username. De userID koppel je aan een tabel met alle gebruikers daarin, dus gekoppeld aan het id veld in de gebruikers tabel. Denk toch wel dat je een beetje overbodige data opslaat...
 
Steen

steen

25/04/2009 20:24:00
Quote Anchor link
GaMer13, dit is maar een voorbeeld, het gaat om een veld die ik verder niet gebruik. De methode van stien werkt inderdaad!
 
Harry

Harry

25/04/2009 20:39:00
Quote Anchor link
Noppes schreef op 25.04.2009 19:41:

En wat Harry gepost heef dat is helemaal van de tandjes, je kan met 1 sql statement voor het een en ander zorg dragen.


Oh, dat geloof ik best, ik ben niet zo'n kei in het korte sql statement gebeuren maar probeer het wel op te lossen, dan al niet met een omweg.
In ieder geval leer ik weer van jullie korte oplossingen!
Bedankt Stien!

EDIT:
Heb je toevallig ook de oplossing voor mijn vraag?
Gewijzigd op 01/01/1970 01:00:00 door Harry
 
Midas

Midas

25/04/2009 22:10:00
Quote Anchor link
steen schreef op 25.04.2009 20:06:
Waarom zou het datamodel niet kloppen? Denk maar aan posts, wanneer je alleen de gebruikers met meer dan bijvoorbeeld 500 posts wilt laten zien heb je ongeveer hetzelfde nodig als waarnaar ik vraag. Volgens mij komt stien het dichtst in de buurt, even uitproberen.
Wat dacht je dan van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= "SELECT veld1,veld2 FROM users WHERE posts > 500";
?>

?
 
Mark PHP

Mark PHP

26/04/2009 00:26:00
Quote Anchor link
In dat geval houd je redundante informatie bij. Je telt gewoon het aantal reacties uit de reactietabel, behorende bij een bepaalde userid.
Dit hoef je niet apart bij te houden. Mocht je dat toch per se willen, gebruik dan gewoon VIEWS.
Gewijzigd op 01/01/1970 01:00:00 door Mark PHP
 
Eddy E

Eddy E

26/04/2009 09:19:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT gebruikersnaam, COUNT(gebruikersnaam) AS aantal
FROM tabel
ORDER BY aantal
LIMIT 0, 10


De code van Stien zal waarschijnlijk hetzelfde geven, maar deze is (volgens mij) iets sneller.
 
Hipska BE

Hipska BE

26/04/2009 10:22:00
Quote Anchor link
@Eddy: Als dit zou sneller zijn kan ik zo niet oordelen, maar juiste informatie is bij jou niet gegarandeerd..

Stel nu dat er maar 6 gebruikersnamen zijn die meer dan 4 keer voorkomen, dan zal uw query nog steeds 10 gebruikersnamen teruggeven.
 
Eddy E

Eddy E

29/04/2009 08:02:00
Quote Anchor link
Daar heb je inderdaad wel een punt. Mocht dat zo zijn, dan is de oplossing van Stien beter.
Maar dat zal waarschijnlijk niet het geval zijn...

HAVING is nogal zwaar vergeleken met een LIMIT. Vandaar.
 
Klaasjan Boven

Klaasjan Boven

29/04/2009 09:27:00
Quote Anchor link
De oplossing van stien is de enige juiste
 



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.