twee lijsten achter elkaar zetten en doorlopen

Status
Niet open voor verdere reacties.

djemmers

Gebruiker
Lid geworden
7 jul 2006
Berichten
129
hey,

ik heb een sql database waar ik via php gegevens uithaal.
met de volgende commando's

$sql="de querry"
$db->query($sql)
$db->next_Record()
$db->Rexord[x] -> met x het volgnummer van de variable van het tuppel.

nu heb ik het volgende probleem.
heb twee querries die uit dezelfde tabel verschillende tupels halen in een bepaalde volgorde.
nu moet ik die lijsten achter elkaar zeteen en doorlopen met $db->next_Record()
Maar ik weet niet hoe die lijsten aan elkaar te plakken, kan ik mijn twee sql querries samenvoegen zodat ik 1 resultaat( de twee lijsten aan elkaar geblakt ) uit 1 querry heb?

kan iemand me helpen?

En welke info hebben jullie nog nodig?
 
Ik zal mijn vraag eens anders stellen:

er is tabel met landen: tblLand
en een tabel met kampen: tblKamp

Nu is er een bestaande php pagina waarvan een screenshotje bijgevoegd.
die in de kolommen de landen heeft en per rij een kamp.

ik gebruik 1 query om de landen uit tblCountry te halen in een bepaalde volgorde
(tblLand heeft een int variable (order) daarvoor)

Nu moet ik afhankelijk van wie ingelogd is op de site een bepaald land in de eerste kolom zetten.
Het beslissen welk land is geen probleem,het uit de db halen ook niet.

Maar nu moet dat land voor de oorspronkelijke volgorde geplakt worden.
maw, hoe pas ik volgende query aan zodat land met countrycode= NL eerst komt en daarna op order gesorteerd wordt?

werkende query (eenvoudige versie):

select * from tblCountry where hascamp=1 group by tblCountry.order

nu wil ik dat het land NL (countryCode=NL) eerst komt en daarna gesorteerd wordt op "order".

Hoe pak ik dit best aan?
 

Bijlagen

  • screen.gif
    screen.gif
    16 KB · Weergaven: 60
Je stelt je vraag in de sql-sectie, maar geeft relatief weinig sql-informatie.

Kun je de 2 (volledige) sql's eens posten die je aan elkaar wilt plakken? Mocht er een "select *" in één van de query's zitten wil je dan de kolomnamen van de betreffende tabel geven?
 
ok hier komen ze:
query die de landen op volgorde selecteert:
Code:
SELECT tblCountry.countryCode, tblCountry.country, tblCountry.flagURL 
FROM 
(tblCamp INNER JOIN tblComposition ON tblCamp.camp_ID = tblComposition.camp_ID and tblCamp.project_ID=tblComposition.project_ID) 
INNER JOIN tblCountry ON tblCountry.country_ID = tblComposition.country_ID 
WHERE 
tblCamp.campYear=".$year." and tblCountry.countrycode != 'NL' 
GROUP BY 
tblCountry.order, tblCountry.countryCode, tblCountry.country, tblCountry.flagURL

de query die het land dat ervoor in de lijst moet komen selecteert:
Code:
SELECT tblCountry.countryCode, tblCountry.country, tblCountry.flagURL
FROM
tblCountry
WHERE
countryCode='NL'

hoop dat dit het duidelijker maakt
 
Laatst bewerkt:
Zolang de kolommen hetzelfde zijn kun je de 2 sql's zo aan elkaar plakken met "union". Wanneer je hardhandig in sql de sortering wilt bepalen kan dat met een extra kolom zoals in het volgende voorbeeld:
PHP:
SELECT 2 sortering, tblCountry.countryCode, tblCountry.country, tblCountry.flagURL 
FROM 
(tblCamp INNER JOIN tblComposition ON tblCamp.camp_ID = tblComposition.camp_ID and tblCamp.project_ID=tblComposition.project_ID) 
INNER JOIN tblCountry ON tblCountry.country_ID = tblComposition.country_ID 
WHERE 
tblCamp.campYear=".$year." and tblCountry.countrycode != 'NL' 
GROUP BY 
tblCountry.order, tblCountry.countryCode, tblCountry.country, tblCountry.flagURL
UNION
SELECT 1 sortering tblCountry.countryCode, tblCountry.country, tblCountry.flagURL
FROM
tblCountry
WHERE
countryCode='NL'
ORDER BY
sortering
;
De extra kolom hoef je verder niets mee te doen, is puur voor de sortering. Heb je hier wat aan? Vraag ander gerust verder!
 
dus union zou moeten lukken..
maar lukt niet

hier de querry
(appart werken ze perfect)
Code:
 SQL-query : 

(
SELECT tblCountry.countryCode, tblCountry.country, tblCountry.flagURL
FROM tblCountry
WHERE tblCountry.country_ID = '21'
)
UNION (

SELECT tblCountry.countryCode, tblCountry.country, tblCountry.flagURL
FROM (
tblCamp
INNER JOIN tblComposition ON tblCamp.camp_ID = tblComposition.camp_ID AND tblCamp.project_ID = tblComposition.project_ID
)
INNER JOIN tblCountry ON tblCountry.country_ID = tblComposition.country_ID
WHERE tblCamp.campYear = 2007 AND tblCountry.country_ID != '21'
)
GROUP BY tblCountry.order, tblCountry.countryCode, tblCountry.country, tblCountry.flagURL
LIMIT 0 , 30

MySQL retourneerde:

You have an error in your SQL syntax near '(  SELECT tblCountry.countryCode, tblCountry.country, tblCountry.flagURL FROM tb' at line 1
 
als ik de haakjes rond de eerste select weghaal is de error:

You have an error in your SQL syntax near 'UNION SELECT tblCountry.countryCode, tblCountry.country, tblCountry.flagURL FRO' at line 1


misschien is het volgende handig:
mijn provider draait: MySQL 3.23.58
 
Laatst bewerkt:
Ik lees inderdaad dat het union commando pas ondersteund wordt vanaf versie 4 :evil:. Als alternatief wordt aangeraden met "left join" te werken en een dummy-tabel. Dit is het voorbeeld dat erbij staat:

Code:
SELECT [fields]
FROM _dummy AS D
LEFT JOIN [table1] ON (D.num = 0 AND [condition1])
LEFT JOIN [table2] ON (D.num = 1 AND [condition2])
WHERE D.num < [table count]

Kun je hier wat mee?

bron
 
ik neem aan dat dat zou moeten werken,

maar krijg het niet in orde (snap er eerlijk gezegd niets van...)
 
Wellicht kun je een verzoek bij je provider indienen om te upgraden? Er zullen best meerdere verschillen zijn die je nu mist.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan