[opgelost] Opbouwen select query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP developer

Functie Voor een opdrachtgever in omgeving Leiden zijn wij op zoek naar een PHP developer die affiniteit heeft met C++. Ben jij reeds afgestudeerd of heb je al een paar jaar ervaring? Lees snel verder en kijk of dit iets voor jou is! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van

Bekijk vacature »

.NET Developer gezocht!

Functie omschrijving Wij zijn op zoek naar een .NET Developer! Wil jij werken voor een internationaal bedrijf waar je legio mogelijkheden krijgt als Software Ontwikkelaar? Grijp nu je kans en kijk snel of jouw vaardigheden aansluiten bij onderstaand profiel! Je kunt een uitdagende rol gaan vervullen als .NET Developer binnen een internationaal bedrijf dat gevestigd is in omgeving Bergen. Dit bedrijf is zeer vooruitstrevend en verricht betekenisvol werk. Binnen dit bedrijf wordt gewerkt aan de productie en ontwikkeling van medische middelen. Als .NET Developer ga jij je bezig houden met het volgende: Je wordt betrokken bij alle fasen van software

Bekijk vacature »

.NET Developer

Functie omschrijving In deze functie ga je werken als C# Developer. Jij gaat aan de slag met de volgende taken: Maatwerk software bouwen; Huidige softwareprojecten verder uitbouwen en optimaliseren; Ideeën van de klant omzetten naar handige oplossingen en tools; Bovenstaande doe je middels de Microsoft- stack: C#, ASP.NET en MVC/ Entity Framework. Ben je net afgestudeerd aan een HBO opleiding Informatica, aarzel dan niet om te solliciteren. Dit is namelijk de ideale startersfunctie! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van websites. Dit is door

Bekijk vacature »

C#.NET ontwikkelaar

Functieomschrijving Voor een gewaardeerde werkgever in regio Tilburg zijn wij op zoek naar een C#.NET ontwikkelaar. Je bent verantwoordelijk voor het ontwikkelen van dashboards, webapplicaties en apps voor de eigen IOT-oplossingen. Samen met een vooruitstrevend team van ontwikkelaars en engineers krijgen jullie de opdracht om de sensoren in de apparatuur te scannen en vervolgens de data om te zetten in belangrijke inzichten voor de klanten. Taken en verantwoordelijkheden: Heb jij ideeën over nieuwe technieken die jullie kunnen implementeren? Hier wordt echt naar je geluisterd en gekeken of jouw idee daadwerkelijk ingezet kan worden; Je gaat aan de slag met de

Bekijk vacature »

Java developer

Functie Je gaat aan de slag als Tester voor een aantal mooie projecten. Je komt terecht in een DevOps team waar jij aan de slag gaat om de kwaliteit te waarborgen omtrent de maatwerk software voor de klanten. Je draait je hand er niet voor om de adviserende rol te bekleden op het gebied van testautomatisering en het opzetten van testframeworks. Zoals aangegeven ga je daadwerkelijk in het eigen team aan de slag en is het daarnaast ook gebruikelijk bij de klanten op locatie te komen om te werken aan de opdrachten. Je krijgt zodoende echt een mooie kijk in

Bekijk vacature »

Low-code developer

Functie omschrijving Heb jij altijd al een training willen volgen in het buitenland? Voor een leuke opdrachtgever in omgeving Alphen ad Rijn zijn wij op zoek naar kandidaten die aan de slag willen als Low Code Developer! Beschik jij over HBO/WO nivo, bij voorkeur Informatica, maar een ander technische opleiding zoals bijv. wiskunde, natuurkunde is ook goed. Heb jij aantoonbare affiniteit met IT en ben jij gedreven, enthousiast, communicatief vaardig en klantgericht? Lees dan snel verder! Je wordt getraind tot een volwaardig Low Code Developer, het traject ziet er als volgt uit: Start 1e week januari, opleiding van 3 weken

Bekijk vacature »

Randstad B.V.- Freelance Senior Fullstack Develope

Startdatum: 01.05.2023 Richttarief: € 75,00 - €85,00 Duur van de opdracht: 1 jaar Uren per week: 40 Werkmodel: Hybride, dinsdag en donderdag aanwezig op kantoor in Diemen en meer wanneer dit nodig is. Functieomschrijving: De ideale kandidaat gaat onderdeel uitmaken van een junior team binnen het foundation domein. Vanuit het foundation domein werkt dit team samen met andere foundation teams en teams uit het online domein (professionals B2B en B2C) voor het bouwen en integreren van HRM functionaliteiten (verlof en benefits) in de persoonlijke portal van Interim Professionals. Er is meer backend werk dan frontend, maar kandidaat moet beiden leuk

Bekijk vacature »

C# ontwikkelaar

Functie omschrijving Werk jij graag met C# en het .NET framework in een leuk familiebedrijf? Lees dan snel verder! Jouw takenpakket hierbij is: Je gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Je gaat werken in een Microsoft omgeving (ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Daarnaast optimaliseer je de bestaande software. Bedrijfsprofiel Deze organisatie is gevestigd in de omgeving van Best en is een echt familiebedrijf. Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met

Bekijk vacature »

Software Ontwikkelaar

Functieomschrijving In deze uitdagende functie als Software Developer ga je de volgende taken uitvoeren: Maatwerk back-end software programmeren; API koppelingen bouwen; Software optimaliseren voor klanten; Bouwen maatwerk applicaties; Werken met Microsoft stack zoals C#, .NET (Core) en Entity framework; Bedrijfsprofiel Je gaat werken bij een klein softwareontwikkelingsbureau, die maatwerk software bouwt voor klanten door heel Nederland. Dit doen zij al meer dan 20 jaar. Het is van oorsprong een familiebedrijf, opgezet door de eigenaar, die er nog steeds werkt. Het team bestaat vooral uit back-end developers en één systeembeheerder. Je krijgt veel kans om jezelf te ontwikkelen en krijgt tevens

Bekijk vacature »

PHP Software Developer

Functie omschrijving PHP Software Developer gezocht! Voor een organisatie in de regio Zeist die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in een scrumteam aan de ontwikkeling van een medicatiebewakingssysteem; Meedenken over de mogelijkheden en onmogelijkheden van projecten;

Bekijk vacature »

Ontwikkelaar Identity & Access Management

Dit ga je doen Als Identity & Access Management Ontwikkelaar zorg jij er voor dat studenten, medewerkers en docenten de juiste benodigdheden op het juiste moment kunnen gebruiken; Het juist opslaan van onderzoeksdata en het openbaar beschikbaar stellen van publicaties (Open Access); Studenten, collega's en wetenschappers ondersteunen; Agile en Scrum werken; Technisch Applicatiebeheer; Ontwikkelen in One Identity Manager en VB.NET. Hier ga je werken Als Ontwikkelaar kom je terecht in een hecht team die zich richt op wetenschappelijke informatie en ICT. Jij bent degene die er voor zorgt dat alle informatie, uit diverse onderzoeken, bij de juiste personen terecht komt.

Bekijk vacature »

Developer Angular & Kotlin

Dit ga je doen Het (door)ontwikkelen van mobiele apps en webapplicaties; Het opstellen van technisch ontwerp en het bespreken van ontwerpen met de software architect; Het uitvoeren van werkzaamheden op het gebied van technisch testen; Het in de gaten houden van nieuwe ontwikkelingen op jouw vakgebied en het adviseren van de organisatie hierover. Hier ga je werken Het gaat om een bekend internationaal handelsbedrijf met ruim 800 medewerkers, verdeeld over verschillende deelbedrijven. Deze organisatie is van oorsprong een familiebedrijf, er wordt hard gewerkt, er heerst een no nonsense en doeners mentaliteit, een informele sfeer en er is een mix van

Bekijk vacature »

Senior Airport Developer ( System engineer)

De functie Nice to know (you) De nieuwe A-pier wordt de duurzaamste van Schiphol. Als deze af is ligt er 4000 vierkante meter zonnepanelen op het dak. En de toiletten? Die spoelen door met regenwater. we gaan ervoor: het creëren van de meest duurzame en hoogwaardige luchthavens ter wereld. een toekomstbestendig en duurzaam Schiphol. Daar werken we elke dag hard aan in team Development & Sustainability. Jij bent regisseur, expert én aanjager van de ontwikkeling van Schiphol. Connecting your world Hoe maak je de ambities en doelstellingen van Schiphol concreet in een project? De waarde voor Schiphol naar eisen die

Bekijk vacature »

Medior PHP developer

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

Bekijk vacature »

Medior Java developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »
Bas IJzelendoorn

Bas IJzelendoorn

30/05/2013 12:58:36
Quote Anchor link
Ik kom niet helemaal uit mijn query meer.

Ik heb een tabel cases:
case_id,
..
..

Daarnaast heb ik een koppeltabel:
id,
case_id,
categorie_id

1 case kan 1, 2 of 3 categorieen hebben. Dus ook 1, 2 of 3 records in de koppeltabel.

Uiteindelijk wil ik het case_id van de koppeltabel selecteren en maar 1x tonen als het alle (1, 2 of 3) waardes bevat van alle geselecteerde categorieen. En de case_id's die bijvoorbeeld maar 1 of 2 van de 3 geselecteerde waardes bevat mag hij niet tonen.

Heb op dit moment de onderstaande query. Op het moment dat ik 1 categorie selecteer gaat het goed, maar bij 2 of 3 vindt hij het niet leuk en haal ik geen resultaten meer op. Terwijl die er wel zijn. Dit heeft te maken met de AND, als ik de vervang naar OR haalt hij wel alle resultaten op, maar toont hij ook die maar 1 of 2 van de 3 categorieën bevat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
$Tquery1 = "SELECT id,categorie_id,case_id FROM koppeltabel WHERE categorie_id = '".$categorie_id[0]."'";
if (!(empty($categorie_id[1]))){
$Tquery1 .= " AND categorie_id = '".$categorie_id[1]."'";
}
if (!(empty($categorie_id[2]))){
$Tquery1 .= " AND categorie_id = '".$categorie_id[2]."'";
}
$Tquery1 .= "GROUP BY case_id ORDER BY id DESC";

(het bovenstaande verdient vast niet de schoonheidsprijs)

Hoe bouw ik mijn query op de beste manier op?
Gewijzigd op 31/05/2013 15:10:14 door Bas IJzelendoorn
 
PHP hulp

PHP hulp

17/11/2024 19:35:19
 
Erwin H

Erwin H

30/05/2013 14:09:54
Quote Anchor link
Probleem is dat de waardes waarop je wil selecteren in verschillende rijen staan in je tabel. Je moet daar dus een trucje voor hebben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT case_id
FROM koppeltabel
WHERE categorie IN (1,2,3)
GROUP BY case_id
HAVING COUNT(*) = 3
ORDER BY case_id

Hiermee selecteer je eerst eigenlijk alle regels, groepeer je op case_id en dan filter je op het aantal rijen. Alleen de case_ids met drie rijen (dus alle drie de mogelijkheden) worden via de HAVING geselecteerd.
Mij is alleen niet helemaal duidelijk of de categorieen waarop je selecteert variabel is. Zo ja, dan moet je mogelijk het where statement en het having statement aanpassen aan de selectie van categorieen.
Gewijzigd op 30/05/2013 14:10:43 door Erwin H
 
Bas IJzelendoorn

Bas IJzelendoorn

30/05/2013 16:09:20
Quote Anchor link
Moet inderdaad variabel zijn. 1 case kan 1 of 2 of 3 categorieën hebben. Daarnaast zal het case_id gebruikt moeten worden om gegevens uit de tabel cases te halen:

tabel cases:
id <- koppeling case_id uit de koppeltabel
naam
datum
actief <- en hij mag alleen de resultaten geven die 'actief' zijn

Hoe doe ik dit?
 
Erwin H

Erwin H

30/05/2013 17:15:57
Quote Anchor link
Die actief voorwaarde stop je gewoon bij de where.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT case_id
FROM koppeltabel
WHERE categorie IN (1,2,3)
  AND actief = true
GROUP BY case_id
HAVING COUNT(*) = 3
ORDER BY case_id

Mocht je nu een ander aantal cetegorieen nodig hebben dan pas je je query daarop aan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT case_id
FROM koppeltabel
WHERE categorie IN (4,5)
  AND actief = true
GROUP BY case_id
HAVING COUNT(*) = 2
ORDER BY case_id

Zo te zien heb je de nodige categorieen al in een array staan, dus de query kan je vrij eenvoudig in php opbouwen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if ( count( $categorie_id ) > 0 ){
  $sql = 'SELECT case_id
          FROM koppeltabel
          WHERE categorie IN ('
.implode( ',', $categorie_id ).')
            AND actief = true
          GROUP BY case_id
          HAVING COUNT(*) = '
.count( $categorie_id ).'
          ORDER BY case_id'
;
}

?>

Het if statement wil je er wel omheen, want als je array leeg is krijg je dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE categorie IN ()

en dat levert je een foutmelding op.
Gewijzigd op 30/05/2013 17:16:18 door Erwin H
 
Bas IJzelendoorn

Bas IJzelendoorn

30/05/2013 18:32:40
Quote Anchor link
Thnx,

Helpt me al een eind op weg. Nu is het echter zo dat 'actief' niet uit de tabel 'koppeltabel' komt maar uit de tabel 'cases'.

Daarnaast moet hij net als het veld 'actief', ook de velden 'naam' en 'datum' uit de tabel 'cases' halen. De gehele structuur ziet er zo uit:

categorieen:
id,
type,
categorie_naam

koppeltabel:
id,
*case_id, <- id van cases
categorie_id <- id van categorieen

cases:
id <- koppeling case_id uit de koppeltabel
*titel
*datum
*actief <- en hij mag alleen de resultaten geven die 'actief' zijn

De velden waar een * wil ik met behulp van de query uit de database

Ik heb nu het volgende:

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
31
32
33
<?php
// selectie boxen optellen
foreach($_POST['Torganisatie'] as $Torganisatie) {
    $categorie_id[] = mysql_real_escape_string($Torganisatie);
}

// query opbouwen
if ( count( $categorie_id ) > 0 ){
    $sql = "SELECT k2.id, k1.case_id, k2.active, k2.titel
            FROM koppeltabel AS k1,
            cases AS k2
            WHERE k1.categorie_id IN ("
.implode( ",", $categorie_id ).")
            AND k2.id IN ("
.implode( ",", $categorie_id ).")
            AND k2.active='actief'
            GROUP BY k1.case_id
            HAVING COUNT(*) = "
.count( $categorie_id )."
            ORDER BY k2.id"
;
}

// query uitvoeren
$resultaat = mysql_query($sql);
if($resultaat && mysql_num_rows($resultaat) >= 1){
    // resultaten tonen
    while($res = mysql_fetch_array($resultaat)) {
        $id = mysql_real_escape_string ($res['id']);
        $titel = mysql_real_escape_string ($res['titel']);
        echo $id.'<br>';
        echo $titel.'<br>';
    }

// indien geen resultaat
} else {
    echo 'geen resultaat<br>';
    echo $sql; // <---- VERWIJDEREN
}
?>


Echter krijg ik nu 1 case 2x eruit eruit, ipv 2 á 3 cases. Volgens mij zit ik gewoon echt onnodig te prutsen :S
 
Eddy E

Eddy E

30/05/2013 20:49:54
Quote Anchor link
LEFT JOIN cases erin.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT c.id, c.type, c.categorie_naam, d.titel, d.datum, d.actief
FROM koppeltabel AS k
LEFT JOIN categorieen A c ON c.id = k.categorie_id
LEFT JOIN cases AS d ON d.id = k.case_id
WHERE k.categorie_id IN ('.implode( ',', $categorie_id ).')
AND d.actief = true
GROUP BY k.case_id
HAVING COUNT(*) = '.count( $categorie_id ).'
ORDER BY c.id DESC';      


Wellicht nog ergens toch een foutje, maar met die LEFT JOIN werkt het ook wel.
 
Erwin H

Erwin H

30/05/2013 21:30:45
Quote Anchor link
Even weer de benodigde uitleg over aggregate functies en GROUP BY, dat blijft altijd lastig. Als je een aggregate functie gebruikt (ofwel in de select, ofwel via een having) dan moeten alle niet aggregate kolommen uit de select in de GROUP BY vermeld worden. Anders krijg je niet gedefinieerde waardes voor de kolommen. De query van Eddy is wat dat betreft dus fout. Vooral omdat hij categorie informatie erbij zet en dat kan in dit geval echt niet. Je selecteert juist alleen die cases die meer dan 1 categorie hebben. Welke categorie informatie selecteer je dan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT k.case_id
FROM koppeltabel k
INNER JOIN cases c ON k.case_id = c.id
WHERE k.categorie IN (4,5)
  AND c.actief = true
GROUP BY k.case_id
HAVING COUNT(*) = 2
ORDER BY k.case_id

Hier kan je dan eventueel nog extra kolommen uit de cases tabel bij voegen in de SELECT, mits je die ook in de GROUP BY zet.
Informatie uit de categorie tabel kan je er eigenlijk niet bij zetten. Doe je dat wel dan krijg je mogelijk meer dan 1 rij per case eruit.
Gewijzigd op 30/05/2013 21:32:20 door Erwin H
 
Eddy E

Eddy E

30/05/2013 21:38:52
Quote Anchor link
Mmm zit wat in inderdaad. Ik heb eigenlijk daar niet op gelet, puur de LEFT JOIN erbij gezet (en de SELECT aangevuld).
Maar de categorie kan je inderdaad niet pakken omdat je daarvan 3 verschillende hebt (in 1 rij).
Maar goed, al met al komen we er wel.
 
Erwin H

Erwin H

30/05/2013 21:40:50
Quote Anchor link
Ik zou ook een inner join gebruiken, omdat als een case niet bestaat in de cases tabel je hem ook niet hoeft op te pakken uit de koppeltabel (maar dat is mijn interpretatie).
 
Bas IJzelendoorn

Bas IJzelendoorn

31/05/2013 15:09:51
Quote Anchor link
Helemaal top.

Moest hem hier en daar nog even ietsjes aanpassen naar eigen velden. Maar hij werkt nu perfect. Mijn dank is groot! Ik zag het vandeweek gewoon weg ff niet meer :)
 



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.