where clausule met meerdere waarden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sara Z

Sara Z

01/12/2007 13:16:00
Quote Anchor link
Hi,

Ik ben een PHP beginner en ik heb een probleem.

Ik bebruik deze query om gegevens van de database te halen:


$split_eventsIMAGEID2 = explode(" ",$events_row['events_image_id']);


$sql = "SELECT i.image_id, i.image_thumb_file, i.image_media_file, e.events_id, e.events_sponsors, e.events_hits, e.events_plaats, e.events_land, e.events_thumb, e.events_name, e.events_description, e.events_datum1, e.events_datum2, e.events_days, e.events_adres, e.events_contact, e.events_image_id, e.events_user_id, i.cat_id, i.user_id, i.image_name, i.image_date, i.image_active, i.image_hits".$additional_sql.", c.cat_name".get_user_table_field(", u.", "user_name")."
FROM (".EVENTS_TABLE." e, ".IMAGES_TABLE." i, ".CATEGORIES_TABLE." c)
LEFT JOIN ".USERS_TABLE." u ON (".get_user_table_field("u.", "user_id")." = i.user_id)



// Deze line wil ik verbeteren:

WHERE i.image_id = '$split_eventsIMAGEID2[0]' or i.image_id = '$split_eventsIMAGEID2[1]' or i.image_id = '$split_eventsIMAGEID2[2]' or
i.image_id = '$split_eventsIMAGEID2[3]' or i.image_id = '$split_eventsIMAGEID2[4]' or i.image_id = '$split_eventsIMAGEID2[5]' or
i.image_id = '$split_eventsIMAGEID2[6]' or i.image_id = '$split_eventsIMAGEID2[7]' or i.image_id = '$split_eventsIMAGEID2[8]' or
i.image_id = '$split_eventsIMAGEID2[9]' or i.image_id = '$split_eventsIMAGEID2[10]' or i.image_id = '$split_eventsIMAGEID2[11]' or
i.image_id = '$split_eventsIMAGEID2[12]' or i.image_id = '$split_eventsIMAGEID2[13]' or i.image_id = '$split_eventsIMAGEID2[14]'

//------------------------------------------------



GROUP BY i.image_id
ORDER BY i.image_id ASC";

$result = $site_db->query($sql);
$num_rows = $site_db->get_numrows($result);


Dus mijn vraag is:
Wat ik moek doen als ik meer dan 100 ($split_eventsIMAGEID2[xxx]') heb?

Bij voorbaat dank,
Cruxy
Gewijzigd op 01/01/1970 01:00:00 door Sara Z
 
PHP hulp

PHP hulp

22/11/2024 06:43:11
 
Frank -

Frank -

01/12/2007 13:33:00
Quote Anchor link
De query is gewoon fout, de GROUP BY is ongeldig. Ik vrees dat je MySQL gebruikt, die zal de nodige onzin als resultaat retour geven, andere databases keuren de query direct af.

GROUP BY gebruik je bij agregate functies en die staan niet in jouw query. Daarnaast zul je allen velden in het SELECT-gedeelte die niét in een agregate functie staan, in de GROUP BY moeten noemen.

Verder vind ik het vaag dat de tabelnamen als variabelen zijn gedefinieerd, dat belooft niet al te veel goeds. Uitzonderingen daargelaten.
 
Sara Z

Sara Z

01/12/2007 13:39:00
Quote Anchor link
Bedankt pgFrank voor je reactie.

Eigenlijk werkt de query perfect. Ik heb het in verschillende voorbeelden getest en ik krijg altijd het gewenste resultaat.

Mijn vraag was: hoe kan ik the WHERE regel verbeteren.

WHERE i.image_id = '$split_eventsIMAGEID2[0]' or i.image_id = '$split_eventsIMAGEID2[1]' or i.image_id = '$split_eventsIMAGEID2[2]' or
i.image_id = '$split_eventsIMAGEID2[3]' or i.image_id = '$split_eventsIMAGEID2[4]' or i.image_id = '$split_eventsIMAGEID2[5]' or
i.image_id = '$split_eventsIMAGEID2[6]' or i.image_id = '$split_eventsIMAGEID2[7]' or i.image_id = '$split_eventsIMAGEID2[8]' or
i.image_id = '$split_eventsIMAGEID2[9]' or i.image_id = '$split_eventsIMAGEID2[10]' or i.image_id = '$split_eventsIMAGEID2[11]' or
i.image_id = '$split_eventsIMAGEID2[12]' or i.image_id = '$split_eventsIMAGEID2[13]' or i.image_id = '$split_eventsIMAGEID2[14]'


Ik gebruik trouwens MySQL.

Alvast bedankt voor de support.
Gewijzigd op 01/01/1970 01:00:00 door Sara Z
 
Frank -

Frank -

01/12/2007 13:46:00
Quote Anchor link
Quote:
Eigenlijk werkt de query perfect. Ik heb het in verschillende voorbeelden getest en ik krijg altijd het gewenste resultaat.
Dat is meer dan geluk dan wijsheid, er komt een moment dat het resultaat niet klopt. Waarschijnlijk zul je dan alleen even missen. Het is namelijk wiskundig onmogelijk en databases zijn gebaseerd op wiskunde, de verzamelingenleer.

Dat je MySQL gebruikt, wist ik al, anders was de query ook gewoon afgekeurd. Een goede database zal namelijk geen onmogelijke queries uitvoeren en niet zelf resultaten verzinnen. Dat is namelijk wat MySQL doet, willekeurig een resultaat oplepelen.

Tip: Stel MySQL maar eens in op STRICT-mode (ANSI), dan zul je zien dat ook MySQL deze query afkeurt. Ook de makers van MySQL weten wel dat het onzin is, vandaar dat ze hier vanaf willen...

Kortom, ga opnieuw beginnen en gooi bovenstaande query weg. Op een slechte dag ga je daarmee namelijk hopeloos de mist in.
 
Sara Z

Sara Z

01/12/2007 13:48:00
Quote Anchor link
Ok bedankt!
 



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.