Dubbel query result
Ik heb een query die er ingekort ongeveer zo uit ziet:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$query = "SELECT
tbl_customers.name as name
FROM
tbl_customers
WHERE
tbl_administrations.id IN (".implode(",",$array).")";
?>
$query = "SELECT
tbl_customers.name as name
FROM
tbl_customers
WHERE
tbl_administrations.id IN (".implode(",",$array).")";
?>
Dit is een ingekorte versie, niet mijn echte query.
Nu zitten er in $array bijvoorbeeld 2 of meerdere waardes, namelijk de waardes van tbl_administrations.id. Deze zijn gekoppeld aan tbl_customers.id
Nu kan er altijd maar 1 tbl_customer uitkomen, maar doordat er meerdere waardes aan gelijk zijn krijg ik dus een herhaling van de naam, afhankelijk van hoeveel er in de array zetten.
Nu zou ik willen dat hij de naam maar 1 keer weergeeft in plaats van herhalen.
Hoe pak ik dit aan?
gooi die array eerst door de array_unique() functie
"GROUP BY name" al geprobeerd (of misschien "GROUP BY tbl_customers.name", ik ben even niet 100% zeker hoe je alias hier verwerkt wordt)?
Edit:
The SQL GROUP BY statement is used along with the SQL aggregate functions like SUM to provide means of grouping the result dataset by certain database table column(s).
http://www.sql-tutorial.net/SQL-GROUP-BY.asp
The SQL GROUP BY statement is used along with the SQL aggregate functions like SUM to provide means of grouping the result dataset by certain database table column(s).
http://www.sql-tutorial.net/SQL-GROUP-BY.asp
Gewijzigd op 21/12/2011 13:12:27 door Aad B
De vraag hier is, hoe komen die doublures erin? Aangezien niet de hele query er staat is het moeilijk te zien (voor mij in elk geval). Zo is er bijvoorbeeld een join, maar die staat niet in de gequote code om maar iets te noemen.
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
27
28
29
30
31
32
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
<?php
function getDetails($array){
$html = '';
$query = "SELECT
tbl_customers.name as name,
tbl_customers.street as street,
tbl_customers.nr as nr,
tbl_customers.nraddon as nraddon,
tbl_customers.zip as zip,
tbl_customers.residence as residence,
tbl_customers.bankaccount as bankaccount,
tbl_customers.kvk as kvk,
tbl_customers.btw as btw,
tbl_customers.discount as discount
FROM
tbl_customers
Inner Join tbl_administrations ON tbl_customers.id = tbl_administrations.id_customer
WHERE
tbl_administrations.id IN (".implode(",",$array).")";
$result = mysql_query(sprintf($query, $array)) or die(mysql_error());
$html = "<table border=0>";
while($gegevens = mysql_fetch_object($result) ){
$html .= "<tr><td colspan=2 width=50px><br>".$gegevens->name."</td>
<td width=50px><br>" . $gegevens->street . "</td><td width=50px>".$gegevens->nr."</td>
<td width=50px><br>".$gegevens->zip ."</td><td width=50px>".$gegevens->residence."</td></tr>";
}
$html = "</table>";
return $html;
?>
function getDetails($array){
$html = '';
$query = "SELECT
tbl_customers.name as name,
tbl_customers.street as street,
tbl_customers.nr as nr,
tbl_customers.nraddon as nraddon,
tbl_customers.zip as zip,
tbl_customers.residence as residence,
tbl_customers.bankaccount as bankaccount,
tbl_customers.kvk as kvk,
tbl_customers.btw as btw,
tbl_customers.discount as discount
FROM
tbl_customers
Inner Join tbl_administrations ON tbl_customers.id = tbl_administrations.id_customer
WHERE
tbl_administrations.id IN (".implode(",",$array).")";
$result = mysql_query(sprintf($query, $array)) or die(mysql_error());
$html = "<table border=0>";
while($gegevens = mysql_fetch_object($result) ){
$html .= "<tr><td colspan=2 width=50px><br>".$gegevens->name."</td>
<td width=50px><br>" . $gegevens->street . "</td><td width=50px>".$gegevens->nr."</td>
<td width=50px><br>".$gegevens->zip ."</td><td width=50px>".$gegevens->residence."</td></tr>";
}
$html = "</table>";
return $html;
?>
Toevoeging op 21/12/2011 13:31:04:
Group By werkt trouwens op het moment wel,
maar ik weet niet of dit nou de nette oplossing was?
Gewijzigd op 21/12/2011 13:19:06 door Marijke Hakvoort
Edit:
Offtopic: Het is totaal overbodig om op alle tabellen de prefix tbl_ te gebruiken.
Gewijzigd op 21/12/2011 13:41:49 door Aad B
Klopt, alleen heb ik over de 100 tabellen en dan is het toch wel handig om met tbl_ , list_ , of lnk_ te werken. ;)
Marijke Hakvoort op 21/12/2011 13:43:19:
Vreemd argument, ik beheer zeer grote datawarehouses met honderden tabellen en niemand gebruikt tbl_ of lnk_ list_ ?? Wat is een list_ of een lnk_ in MySQL?Klopt, alleen heb ik over de 100 tabellen en dan is het toch wel handig om met tbl_ , list_ , of lnk_ te werken. ;)
Hier werken ze aan een administratie applicatie.
Tja, op zich is het wel handig, je hebt wel mooi overzicht.
lnk is linken tussen bepaalde tabellen, list zijn rijen met waardes en tabellen is hetzelfde in feite..
Aad B op 21/12/2011 13:38:37:
Offtopic: Het is totaal overbodig om op alle tabellen de prefix tbl_ te gebruiken.
Dan kunnen we het ook over bepaalde opmerkingen hebben. Dat zijn nu eenmaal standaarden die sommige mensen gebruiken. Wat is er mis mee? Sommige mensen gebruiken ook de prefix s voor string variabelen, i voor integers etc. Ook totaal overbodig, maar toch is het gemeengoed. Jammer dat dit soort opmerkingen zo vaak geplaatst worden.
Erwin H op 21/12/2011 13:55:59:
Wat er mis mee is zijn de totaal overbodige karakters die je steeds in moet typen bij ontwikkelen en wanneer je met collega's over je datamodel praat spreek je dan ook over tbl-underscore-klanten?? Niet dus. Met name SQL is ontwikkeld als goed leesbare gestructureerde vraagtaal en waarom dan een tabel nog een keer extra tbl_ noemen? Het klinkt afgezaagd maar ik werk al >20 jaar met grote (Oracle) databases en juist die onzinnige prefixes weren we uit de databases. Ontwikkelstandaards heet dat. tbl_ en vw_ etc zijn hobbystandaards.Wat is er mis mee? Sommige mensen gebruiken ook de prefix s voor string variabelen, i voor integers etc. Ook totaal overbodig, maar toch is het gemeengoed. Jammer dat dit soort opmerkingen zo vaak geplaatst worden.